我试图了解 C 函数中按值传递和返回是如何发生的。我发现一段代码如下:
#include <stdio.h>
int fun(int ii, int jj)
{
int kk, ll;
kk = ii + jj;
ll = ii * jj;
return (kk,ll);
}
int main()
{
int i=4, j=5, k, l;
k = fun(i, j);
l = fun(i, j);
printf("%d %d\n", k, l);
return 0;
}
现在显然,当我尝试通过以下方式返回 2 个值时,我没有收到任何错误fun()
.
此外,返回的值fun()
is ll
即 20 (=4*5) 而不是kk
。此外,如果我重写return
声明为:
return (ll,kk);
返回的值是kk
IE。 9(=4+5)。
Query: 为什么会这样?
在你的代码中,在return
陈述
return (kk,ll);
你正在使用逗号运算符 https://en.wikipedia.org/wiki/Comma_operator。根据逗号运算符的属性,您不会返回两个值,而是仅返回逗号运算符的第二个操作数。
为了详细说明,我们来检查一下逗号运算符的属性,直接引用标准,C11
,第 §6.5.17 章,(强调我的)
逗号运算符的左操作数被计算为 void 表达式;它的求值和右操作数的求值之间有一个序列点。然后计算正确的操作数;结果有其类型和值。
所以,本质上,像这样的 return 语句
return (kk,ll);
与
return ll;
希望你能弄清楚另一种情况。
也就是说,推荐的签名main()
is int main(int argc, char*argv[])
或者至少,int main(void)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)