c - 我们可以在 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
解决方案
哇。这是一个极具误导性的结果。
不,你不能像这样在 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
。我什至不确定这是怎么发生的,尽管当我在我的电脑上尝试你的程序时,我得到了类似的结果。
这可能太明显了,无法提及,但是:这个结果并不能保证,它不是可以依赖的东西,也不是可以学习的东西。如果您想从函数返回多个值,还有其他方法可以做到这一点,正如这个问题的其他答案所建议的那样。
推荐阅读
- airflow - 如何使用命令行获取气流 DAG 执行日期?
- android - React Native Android assembleRelease - 错误:jest-haste-map:Haste模块命名冲突
- python - 子进程使用标准输入粘贴文本
- google-apps-script - 删除旧数据的宏
- python - 在 R 和 Numpy 中排序
- android - 我如何修复身份验证错误android应用程序
- ios - UIPageViewController 具有未知数量的 UIViewController 实例
- python - 如何在提交时将表单添加到字典
- python - Python,从按钮列表中删除项目
- opendaylight - Opendaylight 中的 Loop Remover 功能