如果是((x=a+b),(b+c))实际上可以看成(6,10)整个逗号表达式的值应该是10
但这是错的,这儿还有赋值运算符。赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x,10;如果这样写的话,则答案很清晰,为:6
提示:据我统计,这种类型的题目错误率超过70%.
有疑问请HI我:)
,表达式,把最后一个的值赋给b,前两个++a,a++后a的值为3,然后a++,先运用在自增,即先把3赋给b,在自增,所以最后输出结果为:a=4,b=3
逗号表达式的结果为最后一个表达式的值,即这里面的第三个,a加了三次,所以a的结果为4,因为第三个表达式++符号在a的后面,所以是先用a的值计算结果,再给a加1,所以b的值是a最后一次加1之前的值,b=3.
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);