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

#include<stdio.h>
int main()
{
int a=1, b;
b=(++a,a++,a++);
printf("a=%d,b=%d\n",a,b);
return 0;
}
求教详细的分析过程!!!

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

在C语言中逗号运算符如何作用才是合乎规则的?
在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。假设 b=2,c=7,d=5, a1=(++b,c--,d+3); a2=++b,c-,d+3;对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,也就是 d+3,为8,所以...

关于逗号表达式的问题。
关于逗号表达式的问题,首先需要纠正一个误解:printf("x=%d,y=%d",x,x);应该是printf("x=%d,y=%d",x,y);正确结果为x=4,y=11。逗号运算符在C语言中的作用很特别。它以顺序求值的方式连接两个或多个表达式,如3+5,6+8。求解时,先计算表达式1(3+5),再计算表达式2(6+8),最终结...

C语言逗号表达式问题
c语言逗号表达式是由左向右进行的:k=3*2=6,K+2=8,表达式返回8。逗号表达式用法:当顺序点用,结合顺序是从左至右,用来顺序求值,完毕之后整个表达式的值是最后一个表达式的值。示例:main(){int a,s,d;s=2;d=3;a=12+(s+2,d+4);} ...

C语言中逗号表达式的问题
逗号表达式的运算级最低,比赋值运算符级别还低。所以 y=(x=a+b),(b+c);先算x=a+b=6,再y=x=6;而后面的b+c不影响x和y的值。所以最终x,y的值都是6.只不过 y=(x=a+b),(b+c);这整个式子的值是b+c=10而已。如果是y=((x=a+b),(b+c)); 那么才结果是x=6,y=b+c=10...

c语言逗号表达式的问题
逗号运算符的做优先级是最低的,所以要先算赋值运算符.y=(x=a+b),(b+c)是一个表达式,包括两部分:表达式1是一个赋值表达式,表达式2是一个算术表达式.老谭的书里说的是整个逗号表达式的值是表达式2的值,所以,整个逗号表达式的值是b+c,y的值是表达式1的值,即a+b.他写错了.这样写就对了y=(...

c语言中关于逗号运算符的疑问!
逗号表达式,按从左到又的顺序依次计算的,把最后一个表达式的值做为逗号表达式的值 所以 printf( ”%d\\n ” ,z=(x%y,x\/y)) ;中,z的值就是x\/y的值即10\/3=3;a=0;b=0;c=0;c=(a-=a-5),(a=b,b+3)而在这c=(a-=a-5)这是一个赋值表达式,作为这个逗号表达式的第一个表达式...

C语言逗号表达式的问题 x=6,y=7,z=8 r=func((x--,y--,x+y),z...
首先对于第一个参数(x--,y--,x+y),这是一个逗号运算符,从左至右运算:x--(先取x的值,然后x自减,其值变为x=5),同理(先取y的值,然后y自减,其值变为y=6),但由于这是一个逗号运算符,因此x+y的值为x+y=5+6=11,最终r=func((x--,y--,x+y),z--)=func(11,...

c语言关于逗号表达式的问题int a=5;printf("%d",(a=3*5,a*4,a+5...
答案是20,因为A*4与A+5的结果并没有给A,所以A是3*5的值 (a=3*5,a=a*4,a=a+5)这个=65

c语言逗号表达式的问题
C语言提供一种特殊的运算符——逗号运算符。用它将两个表达式连接起来。如:3+5,6+8 称为逗号表达式,又称为“顺序求值运算符”。逗号表达式的一般形式为 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6...

C语言菜鸟提问,关于逗号表达式。请看我下面的例子
这么来看y=(x=a+b)是逗号的前一个语句,那么y就等于6;而(b+c)是逗号的后面一个表达式 你这样看看:加一个变量:int z;z=(y=(x=a+b),(b+c));这样z就等于(b+c)了,那么总结出来:要得到一个逗号表达式的值是要将这个逗号表达式用括号括起来的!!

相似回答
大家正在搜