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

我想知道a的值到底是5还是6?... 我想知道a的值到底是5还是6? 展开
 我来答
seecpp
2011-04-11 · TA获得超过173个赞
知道答主
回答量:23
采纳率:0%
帮助的人:9.5万
展开全部
结果都是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++的,这两个式子,具体编程输出方法我就不写了。
shco
2011-04-11 · 超过12用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:41.7万
展开全部
我把最终的汇编代码贴出来,附上翻译,你一看便知
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 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:135
采纳率:0%
帮助的人:91.2万
展开全部
a 是6 a的值 以括号表达式中 最右边那个表达式的值 作为它最终的结果值。
以后遇到类似情况都是这个原则 括号里边最后边表达式的值 为 最终的结果值 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mercuryuanxin
2011-04-11 · TA获得超过262个赞
知道小有建树答主
回答量:145
采纳率:0%
帮助的人:116万
展开全部
a不变,b为六,x为五
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
血天蓝海
2011-04-11 · 超过20用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:0
展开全部
怎么有括号...求不出来的啊...括号里面又不是计算式...去掉括号的话...x=5 a=6 b=6
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式