我们可以使用 C 中的 return 语句返回多个值吗?如果不能,为什么下面的代码编译成功?

Eri*_*rki 1 c return-type return-value

程序为什么以及如何给出输出?

#include <stdio.h>
int sum(int a ,int b , int c ){
    return a , b ,c;
}
int main() {
    int a=10, b=100 , c=1000 ;
    int x = sum(a , b ,c);
    printf("%d %d %d" ,x);
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:1000 1000 100

Ste*_*mit 6

哇。这是一个极具误导性的结果。

不,您不能在 C 中像这样返回多个值。一个函数最多可以有一个返回值。您不能使用逗号来返回多个像这样的值。

但是,如果你做不到,那为什么它看起来几乎有效呢?这是一个相当复杂的问题,在这里可能无法完全回答。

您的程序有两个完全不相关的问题。第一个问题不是太严重,是线路

return a, b, c;
Run Code Online (Sandbox Code Playgroud)

在函数结束时sum。在英语中,这句话基本上是说,“取出该值a并将其丢弃,然后取出该值b并将其丢弃,然后取出该值c并将其作为实际的返回值。” (有关逗号运算符的更多信息,请参阅逗号运算符的作用是什么? 。)

然后第二个更严重的问题是线路

printf("%d %d %d", x);
Run Code Online (Sandbox Code Playgroud)

main。你的编译器应该警告你这个问题;我的说warning: more '%' conversions than data arguments。你告诉printf,“我要给你三个int要打印的值”。但你撒谎了,因为你只给了它一个int值,x. 那么printf,盲目地追求你所承诺的另外两个价值观,并得到……什么?

一个相当令人难以置信的巧合是,当伸手去获取您没有printf传递的值时,它以某种方式抓住了……被function 中写得不好的语句丢弃的值之一。我什至不知道这是怎么发生的,尽管当我在我的计算机上尝试你的程序时,我得到了类似的结果。returnsum

这可能太明显了,不值得一提,但是:这个结果是不能保证的,它不值得依赖,甚至不值得学习。如果您想从函数返回多个值,还有其他方法可以做到这一点,正如这个问题的其他答案所建议的那样。