有大佬可以讲一下这个程序运行的步骤和为什么得出那个结果吗?
本帖最后由 chenhuhu 于 2022-12-12 17:59 编辑javascript:; #include <stdio.h>
int func(int a, int b) {
int c = a + b;
printf("a = %d, b = %d\n", a, b);
return c;
}
int main()
{
int x = 6, y = 7, z = 8, r, a, b, c;
r = func((x--, y--, x + y), z--);
a = x;
b = y;
printf("r = %d, a = %d, b = %d, z = %d\n", r, a, b, c)
return 0;
}
现在,x, y, z 的值分别是 6, 7, 8。 r, a, b, c 未知
当执行一条语句时:
r = func((x--, y--, x + y), z--);
我们先明白 func 的两个参数是什么, x--, y-- 过后 x, y 变成了 5, 6,所以 x + y = 11,因为逗号运算符仅返回最后一个表达式的值,所以 func 的第一个实参就是 11
第二个很简单,就是 8, 因为 z-- 应该是 func 执行完了之后再自减
所以,func 的参数分别为 8, 11,故, func 函数应该打印 a = 8, b = 11,并且返回 19,r 就赋值为了 19
a = x;
b = y;
a 就等于 8, b 就等于 11
printf("r = %d, a = %d, b = %d, z = %d\n", r, a, b, z);
r, a, b 分别是 19, 5, 6。 z 前面自减过,所以 z 等于 7
整个程序需分析完了,应该打印:
a = 11, b = 8
r = 19, a = 5, b = 6, z = 7
您的结果可能和我不一样,因为这个在不同的系统有不同的结果,因为处理的方式不同,这个仅供参考 这是未定义行为,不同编译器结果不一样,讨论这个问题没有意义
页:
[1]