为什么我们不能从C中的函数返回多个值?为什么?

为什么我们不能从C中的函数返回多个值?为什么?,c,C,如果可能,那么如何返回多个值。 因为返回是通过控制器或CPU中的累加器完成的,所以不能返回 这是正确的原因吗?因为语言就是这样定义的。没有根本原因,;其他语言可以返回多个值,例如Matlab 作为一种解决方法,您可以返回包含多个字段的结构。您可以通过将多个字段放入结构中来完全返回多个项,或者传递指向函数的指针,以便函数可以写入函数返回后仍然存在的值。一次不能返回多个值。因为返回函数的语法定义为只接受一个值。检查下面的示例 a=returnfunction(); 在上述情况下,如果函数retur

如果可能,那么如何返回多个值。 因为返回是通过控制器或CPU中的累加器完成的,所以不能返回


这是正确的原因吗?

因为语言就是这样定义的。没有根本原因,;其他语言可以返回多个值,例如Matlab


作为一种解决方法,您可以返回包含多个字段的结构。

您可以通过将多个字段放入结构中来完全返回多个项,或者传递指向函数的指针,以便函数可以写入函数返回后仍然存在的值。

一次不能返回多个值。因为返回函数的语法定义为只接受一个值。检查下面的示例

a=returnfunction();

在上述情况下,如果函数returnfunction返回多个值,那么编译器将无法初始化变量a返回的值。如果函数returnfunction返回两个值1和2,那么编译器将无法将值1或2赋给变量a。因此,为了防止此类问题,函数的定义方式是不返回多个值。

与它的表达方式相反,实际上没有返回值。 事实上,返回值/地址作为堆栈上的参数传递给函数调用。然后return语句实际上修改了该参数,从而将结果传递给调用者

在某种意义上,它几乎就像void funcarg1,arg2,*ret


不同的语言处理这个问题的方式不同。C在堆栈上只需要一个返回参数。实际上,结构将允许您返回多个值,作为普通参数传递指向结构的指针也可以。

为什么对返回多个值有限制?返回多个值意味着什么?如果必须返回一系列值,指针类型将有所帮助;如果你必须返回两个不同类型的值int和char,你需要两个不同的函数。建议重写这个问题,假设我正确理解了你的意思:为什么在C中一个函数只能返回一个值?这是因为控制器或CPU通过累加器将返回值传递回调用者吗?顺便说一下,并非所有函数返回值都返回到同一寄存器中。该标准对调用约定没有任何规定,但实现有时会对不同类型的返回值使用不同的寄存器或堆栈位置。返回double的函数的返回方式不一定与返回int的函数相同,而返回大型结构的函数显然无法将所有数据填充到寄存器中。调用者和被调用者都知道返回类型是什么,所以他们只需要按照ABI中的定义商定该类型的返回方式。您还可以传入指针并从函数中修改它。因为我们可以将变量的数量传递给函数,变量将在堆栈中创建空间。那么为什么我们不能返回多个变量呢。如果它是从堆栈返回还是从内存返回?@kapilddit:因为语言就是这样定义的。我能想到的最基本的原因是C中的表达式有一个值或是空的,而不是多个值。因此,要使函数调用成为表达式,函数必须返回一个值或void,而不是多个值。这与CPU寄存器、堆栈或内存无关。如果语言设计者想做不同的事情,这些都可以解决。在这种情况下,您可以使用两个变量来捕获返回值。就像在现代CPU/ABI中的争论一样,这是真的吗?