C语言求解释, int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);输出p,q,i,j

 我来答
wjcmqyd
2018-04-09 · TA获得超过5625个赞
知道大有可为答主
回答量:3236
采纳率:79%
帮助的人:816万
展开全部

答:因为 = 的结合方向是从右到左,i++ 是在使用 i 的值后再自加1,++j 是在 j 自加1后再使用其值。所以在 p=(i++)+(i++)+(i++);  语句中,先使用最右边 i=5 的值后再自加1,使得 i=6,接着使用中间的 i=6 即 5+6=11 后再自加1,使得 i=7,最后使用左边的 i=7 即 11+7=18 后再自加1,使得 i=8,最后将18赋值给 p 使得 p=18;

而 q=(++j)+(++j)+(++j); 首先使最右边的 j 自加1使得 j=6 后再使用其值,接着使中间的 j 自加1使得 j=7 后再使用其值即 6+7=13,最后左边的 j 自加1使得 j=8 后再使用其值即 13+8=21,最后将21赋值给 q 使得 q=21。

以上是自己的分析,但实际运行结果却出人意料,结果是:q=22。自己也甚为不解。

此外,当 p=(i++)+(i++);  q=(++j)+(++j); 时的结果是:q=14。

匿名用户
2013-10-27
展开全部
p=15
q=22
i=8
j=8
i和j容易理解,它们都三次自增1,结果都为8
p这样算的p=5+5+5 ,++在变量后面,叫后++运算,就是先使用i变量的值然后再自增1
q是这样算的
如果是q=(++j)+(++j)
结构就是2*7=14
如果式子再加长一点。。。算法就变了。。
3个就是 7+7+8
4个就是 7+7+8+9
5个就是 7+7+8+9+10
用VC6.0验证通过
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
剧同书喜鸾
2019-10-13 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:32%
帮助的人:917万
展开全部
p的值可以确定是15(因为是先使用i的值再把i+1三次),i和j也可以确定都是是8(因为都自增了三次),但是q的值受编译器的运算顺序影响,值不确定(因为你不能保证j的值在运算的式子里是什么时候自增了,里面没有一个顺序点)。
这样子的题目不应该出的,因为这个运算过程并没有c语言标准的相关规定,由具体的编译环境自行确定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式