C 这个包含多个值(变量)的返回语句是如何工作的?
我试图了解C函数中传递值和返回是如何发生的。我在一段代码中进行了如下操作:C 这个包含多个值(变量)的返回语句是如何工作的?,c,function,C,Function,我试图了解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); retu
#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;
}
返回的值是kk
的值,即9(=4+5)
查询:为什么会这样 在代码中,在
return
语句中
return (kk,ll);
你在用这个。根据逗号运算符的属性,您不会返回两个值,而是只返回逗号运算符的第二个操作数
为了详细说明,让我们检查逗号运算符的属性,直接引用标准,C11
,第§6.5.17章,(重点)
逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数结果有其类型和值。
因此,本质上,返回语句
return (kk,ll);
与
return ll;
希望你能想出另一个例子
也就是说,
main()
的建议签名是intmain(intargc,char*argv[])
或者至少是intmain(void)
在您的代码中,在return
语句中
return (kk,ll);
你在用这个。根据逗号运算符的属性,您不会返回两个值,而是只返回逗号运算符的第二个操作数
为了详细说明,让我们检查逗号运算符的属性,直接引用标准,C11
,第§6.5.17章,(重点)
逗号运算符的左操作数作为空表达式计算;它的求值与右操作数的求值之间有一个序列点。然后计算右操作数结果有其类型和值。
因此,本质上,返回语句
return (kk,ll);
与
return ll;
希望你能想出另一个例子
这就是说,
main()
的建议签名是intmain(intargc,char*argv[])
或者至少是intmain(void)
返回int时您希望得到什么?C不支持元组
您正在使用
(ll,kk)
是一个单独的表达式,其内部表达式(由分隔,
-因此名称)从左到右求值。除了最右边的结果(可以有两个以上的子表达式)外,其他所有结果都将被丢弃,最右边的结果是整个表达式的结果。实际上,括号是不必要的,不会改变任何东西。返回int时,您希望得到什么?C不支持元组
您正在使用(ll,kk)
是一个单独的表达式,其内部表达式(由分隔,
-因此名称)从左到右求值。除了最右边的结果(可以有两个以上的子表达式)外,其他所有结果都将被丢弃,最右边的结果是整个表达式的结果。实际上,括号是不必要的,不会改变任何内容。您正在使用
逗号运算符(由标记,
)表示)是一个二进制运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)
您正在使用
逗号运算符(由标记,
)表示)是一个二进制运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回此值(和类型)
出于兴趣,你以为会发生什么?@没用,可能是编译器错误。引用OP“现在看来我没有收到任何错误”:-)事实上是的。各种各样的错误消息。例如,出于兴趣,尝试传递并返回多个值等,您希望发生什么情况?@可能是无用的,编译器错误。引用OP“现在看来我没有收到任何错误”:-)事实上是的。各种各样的错误消息。例如,尝试传递并返回多个值等。