C语言——关于逗号表达式的问题

2024-12-02 20:29:30
推荐回答(4个)
回答1:

如果是((x=a+b),(b+c))实际上可以看成(6,10)整个逗号表达式的值应该是10
但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x,10;如果这样写的话,则答案很清晰,为:6
提示:据我统计,这种类型的题目错误率超过70%.
有疑问请HI我:)

回答2:

,表达式,把最后一个的值赋给b,前两个++a,a++后a的值为3,然后a++,先运用在自增,即先把3赋给b,在自增,所以最后输出结果为:a=4,b=3

回答3:

逗号表达式的结果为最后一个表达式的值,即这里面的第三个,a加了三次,所以a的结果为4,因为第三个表达式++符号在a的后面,所以是先用a的值计算结果,再给a加1,所以b的值是a最后一次加1之前的值,b=3.

回答4:

41:       int a=1, b;
004010E8   mov         dword ptr [ebp-4],1               //a=1    1
42:       b=(++a,a++,a++);
004010EF   mov         eax,dword ptr [ebp-4]
004010F2   add         eax,1
004010F5   mov         dword ptr [ebp-4],eax             // ++a    2
004010F8   mov         ecx,dword ptr [ebp-4]
004010FB   add         ecx,1
004010FE   mov         dword ptr [ebp-4],ecx             // a++    3
00401101   mov         edx,dword ptr [ebp-4]
00401104   mov         dword ptr [ebp-8],edx             // b=a    3
00401107   mov         eax,dword ptr [ebp-4]             // a++    4
0040110A   add         eax,1
0040110D   mov         dword ptr [ebp-4],eax
43:       printf("a=%d,b=%d\n",a,b);