函数可以在C中返回多个值吗?

时间:2014-12-06 05:16:33

标签: c

我是C的初学者。我听说C中的函数不能返回多个值,但在我的程序中并非如此;它返回了多个值,代码运行正常。请解释一下。

#include<stdio.h>
int main () {
    int a=10,b=9;
    return a,b;
}

7 个答案:

答案 0 :(得分:3)

回答这个问题:不是那样,没有。

  • 您可以返回指向包含多个值的malloc'd数组的指针。

  • 或者返回指向包含多个值的malloc'd结构的指针

  • 或者您可以将指针传递给存储位置作为此函数参数的一部分,并在那里设置值。

  • 或者您可以将某些值推送到此函数已有权访问的现有数据结构(动态或静态)中。

  • 或者你可以将int或long分成带有多个值的位域。

  • ......可能还有其他解决方案。

当然,要使其中任何一个工作,调用者必须知道您正在使用的方法并正确调用该函数。

但在C语言中,逗号不是返回多个值的解决方案。逗号运算符计算其两个操作数,丢弃第一个结果,并返回第二个操作数。因此,您的示例只是查看a,将其丢弃,然后返回b。绝对不是你以为你在做什么。

(我应该指出C使用逗号用于几个不同的目的;例如,这里的逗号与数组初始值设定项中的逗号不同。)

对于它的价值,我使用了一种允许用逗号分隔的多值表达式的语言: CLU ,它是许多面向对象语言的祖先。在 CLU 中,您可以编写类似a,b=b,a的语句来交换两个值,或者`r,theta = cartesianToPolar(x,y)“来进行坐标转换。这是一个很好的功能,而且很简单在现代堆栈机器上实现。

CLU 还有许多其他很好的功能,这些功能在以后的语言中没有被提取;我一直想回去试图找出原因。)

答案 1 :(得分:1)

不,你不能从函数中返回多个值 您可以返回一个数组以返回相同数据类型的多个值 要么 您可以返回一个结构以返回不同数据类型的多个值

答案 2 :(得分:1)

函数可以返回单个值。

 #include<stdio.h>
 int main () {
  int a=10,b=9;
  return a,b;
 }

当你那样回来的时候。这里逗号(,)。运营商将工作。它将返回列表中的最后一个值。

答案 3 :(得分:0)

你问:

  

函数可以在C

中返回多于1个值

如果您返回struct但不是main,则可以执行此操作。 main只能返回int

typedef struct MyStruct {int a; int b;} MyStruct;

MyStruct foo(int a, int b)
{
    return MyStruct{a, b};  
}

int main ()
{
   int a=10,b=9;
   MyStruct s = foo(a, b);
}

答案 4 :(得分:0)

没有。 return语句(第6.8.6.4节)只允许一个表达式或根本不允许。 表达式定义为:

§6.5

  

表达式是指定的运算符和操作数序列   计算一个值,或指定一个或一个对象   功能,或产生副作用,或执行   其组合。一个操作数的值计算   运算符在值计算结果之前排序   运营商。

由于对象具有“值”,因此您不能返回多个值。

您遇到的内容称为comma operator(§6.5.17),其中运算符的左操作数被计算为void表达式(基本上意味着它被丢弃)并产生正确的操作数。因此,在您的情况下,a会被丢弃,b会被放弃。

答案 5 :(得分:0)

一个函数只能返回一个值。在你的代码中,它就像这样工作。

int a=(1,10);

现在你打印a的值将是10.这样的同时给予逗号(,)作为回报它是有效的。因此,如果您检查代码的返回值,则为9。

答案 6 :(得分:0)

不要只看编程眼睛。计算机编程中的单词函数来自数学,我们可以在数学f(x,y ..)= x(。)y ...(无论如何计算)中使用着名函数。这是任何复杂计算的最后一个结果是单个值显然是函数返回值。

现在如果你想要函数发送太多的值将所有值绑定到一个结构中作为单个值然后返回。