语句x = (a = 5, b = ++a); 运行后,x、a、b的值依次为?

我想知道a的值到底是5还是6?

结果都是6,整个表达式运算结果如下。
0.你首先要牢记,当一个变量被赋予一个新值的时候,旧值就没有了
1.a首先被赋予5这个值。
2.++在前面是先加后算,所以a先自增为6,这时候5就已经没有了。
3.a自增过后,b被赋予运算过后的a,也就是6了。
4.因为逗号表达式(括号中多个逗号的就是逗号表达式,一般最后计算)的值总是取括号中的最后一个,所以x取b的值,还是6。
不信可以自己写程序试试……

扩展一下,考虑下面这个表达式:
int x,a,b,c;
x = (a = 5, b=a++,c=++a,456,789);
//肯定先从括号中开始算起。
//a刚开始等于5
//b=a++,++运算在后,先算后加,先把a的5给b,然后把a加1,此时b为5,a为6
//c=++a,++运算在前,先加后算,因为上一个式子a已经是6了,所以a再加1,变成7,再给c,此时a为7,c也为7。
//最后才算逗号,x肯定是取后面一个的值,也就是789。
//所以最后x=789,a=7,b=5,c=7

因为不知道你是学C,还是C++的,这两个式子,具体编程输出方法我就不写了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-11
我把最终的汇编代码贴出来,附上翻译,你一看便知
mov dword ptr [a],5 //把5放到变量a中
mov eax,dword ptr [a] //把a的值放到寄存器eax中
add eax,1 //eax+1
mov dword ptr [a],eax //把eax的值赋给变量a,a=6
mov ecx,dword ptr [a] //把a的值给ecx
mov dword ptr [b],ecx //把ecx的值给变量b
mov edx,dword ptr [b] //把变量b的值给edx
mov dword ptr [x],edx //把edx的值赋给x,很显然,此刻 b=6 x= 6,1楼给出了错误答案
第2个回答  2011-04-11
a 是6 a的值 以括号表达式中 最右边那个表达式的值 作为它最终的结果值。
以后遇到类似情况都是这个原则 括号里边最后边表达式的值 为 最终的结果值 。
第3个回答  2011-04-11
a不变,b为六,x为五
第4个回答  2011-04-11
怎么有括号...求不出来的啊...括号里面又不是计算式...去掉括号的话...x=5 a=6 b=6

语句x = (a = 5, b = ++a); 运行后,x、a、b的值依次为?
1.a首先被赋予5这个值。2.++在前面是先加后算,所以a先自增为6,这时候5就已经没有了。3.a自增过后,b被赋予运算过后的a,也就是6了。4.因为逗号表达式(括号中多个逗号的就是逗号表达式,一般最后计算)的值总是取括号中的最后一个,所以x取b的值,还是6。不信可以自己写程序试试……扩展...

执行语句'x=(a=3,b=a--)'后,x,a,b的值依次为()
【答案】:答案:A 解析:因为:a=3,又b=a--,表示a先赋值给b,在进行减减,即b=3,a=2;因为x=a=3,所以x=3;即选A选项。

x=(a=3,b=++a);运行后x,a,b是多少
x = 4, a = 4, b = 4.

语句x=(a=3,b=++a);x等于多少,能详细点说明运行过程麽
最后执行x=(a=3,b=++a),因为(a=3,b=++a)的值是b,此处相当于将b赋值给x。通过先前的分析知道b此时的值为4,因此x最后也等于4。

我这有C语言的题,哪位大侠能解决一下,必有重谢!
B:1C:0D:2 A B C D 4、语句printf(“%d\\n”,strlen(“xyz\\t\\xab\\3\\\\”));的输出结果是( )。本题(1分)A:9B:11C:7D:8 A B C D 5、假设所有变量均为整型,则执行运算x=(a=2,b=5,b++,a+b)后, x的值是( )。本题(1分)A:7B:8C:6D:2 A B C D 6、若二维数组定义为a[...

C语言中执行语句X=(a=3,b=a--);后,x,a,b的值依次是3,2,3,求x,a,b的...
3 2 3 C语言的话 执行的顺序是这样的 a=3 (a=3)b=a (b=3)x=b (x=3)a-- (a=2)以上用GCC验证过

执行语句x=(a=3,b=a––);后,x,a,b的值
a=a-1;第一式右边是逗号表达式,逗号表达式的结果等于右边最后一个表达式的值。所以 第一式,可以分解为:a=3; b=a; x=b;这样,原来的计算按步是:a=3; b=a; x=b; (得 a=3,b=3,x=3)a=a-1; (得 a=2)执行语句x=(a=3,b=a––);后,x,a,b的值 是 3,2,3...

执行语句x=a=10,b=a--后,x,a,b的值依次为
先执行a=10,然后执行x=a=10,最后执行b=a--=9。应该是这样

...执行语句“x=(a=3,b=a--)”后, x,a,b的值依次为 。
执行完之后,a的值是2,b的值是3,x的值是1,原因是这样的,因为括号的优先级高,所以先执行括号里面的,对于逗号运算符隔开的表达式,是按照从左向右执行的,先将3赋给a,然后执行b=a--;因为a--是先使用a然后再将a的值减一,所以a先赋值给b,b得3,然后a才减一,然后a就等于二,由逗号...

已知int x=5; 执行下列语句后,x的值是( )
5的补码!

相似回答