如果可能,那么如何返回多个值。不能因为返回是通过控制器或 CPU 中的累加器完成的。
这是正确的原因吗?
因为这就是语言的定义方式。没有根本原因;其他语言可以返回多个值(例如 Matlab)。
作为“解决方法”,您可以返回一个包含多个字段的结构。
您可以通过将它们放入结构中来完全“返回”超过一项,或者将指针传递给函数,以便函数可以写入一些在函数返回后仍然存在的值。
您一次不能返回多个值。因为返回函数的语法是这样定义的,它应该只接受一个值。检查下面的例子。
a=returnfunction();
在上述情况下,如果函数 returnfunction() 返回多个值,则编译器会混淆将哪个返回值初始化给变量 a。如果函数 returnfunction() 返回两个值 1 和 2,那么编译器会混淆将值 1 或 2 分配给变量 a。所以为了防止这些类型的问题,函数被定义为不返回多个值。
与它的表达方式相反,实际上没有任何值被“返回”。实际上,返回值/地址作为堆栈上的参数传递给函数调用。然后 return 语句实际上修改了该参数,从而将结果传递给调用者。
在某种意义上,它几乎就像void func(arg1, arg2, *ret)
不同的语言处理这个不同。C 期望堆栈上只有一个“返回”参数。事实上,结构将允许您“返回”多个值,因此将指向结构的指针作为普通参数传递也是如此。