You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言能否通过return语句返回多个值?给定代码为何可编译并输出对应结果?

C语言return语句相关问题解答

1. C语言是否可以用return语句返回多个值?

不可以。C语言的return语法一次只能返回1个值,原生不支持多返回值。如果有返回多组数据的需求,通常需要通过传递指针参数、返回结构体、全局变量等方式间接实现。

2. 给出的代码为什么可以编译成功?

你提供的测试代码如下:

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

代码可以编译通过的核心原因是return a , b ,c;这里用到了逗号运算符,并非你以为的多返回值写法:

  • 逗号表达式的规则是从左到右依次执行所有子表达式,整个表达式的最终取值为最后一个子表达式的结果。
  • 所以这条return语句等价于return c;,完全符合C语言语法,所以不会编译报错。

3. 为什么会输出1000 1000 100?

这个输出是两个特性叠加的结果:

  • 第一步sum函数返回值为1000:刚才已经说明,逗号表达式a,b,c的结果是c的值1000,所以变量x会被赋值为1000。
  • 第二步printf触发未定义行为:printf的格式符声明了需要3个int类型参数,但你实际只传了1个参数x。C语言的可变参数函数不会校验参数数量和格式符是否匹配,运行时会按照格式符的数量从栈内存中按顺序取对应长度的数值:
    1. 第一个%d取到传入的x的值,输出1000
    2. 第二个%d取到栈上x之后的残留数据,刚好是main函数中变量c的值1000
    3. 第三个%d取到更靠后的栈残留数据,刚好是main函数中变量b的值100

注意:这个输出结果完全依赖当前运行环境的栈内存布局、编译器实现,属于未定义行为,换个平台/编译器输出结果可能完全不同,没有任何通用性。


内容的提问来源于stack exchange,提问作者Erick Karki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 23:54:01