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

问题描述

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

#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;
}

输出:1000 1000 100

标签: creturn-valuereturn-type

解决方案


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

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

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

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

return a, b, c;

在函数结束时sum。在英语中,这行基本上是说:“取值a并丢弃,然后取值b并丢弃,然后取值c并使其成为实际的返回值。”

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

printf("%d %d %d", x);

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

一个相当令人难以置信的巧合是,当printf伸手去获取你没有return通过的值时,它以某种方式抓住了……其中一个被函数中写得不好的语句扔掉的值sum。我什至不确定这是怎么发生的,尽管当我在我的电脑上尝试你的程序时,我得到了类似的结果。

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


推荐阅读