C语言求解释, int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j);输出p,q,i,j
展开全部
答:因为 = 的结合方向是从右到左,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验证通过
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验证通过
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
p的值可以确定是15(因为是先使用i的值再把i+1三次),i和j也可以确定都是是8(因为都自增了三次),但是q的值受编译器的运算顺序影响,值不确定(因为你不能保证j的值在运算的式子里是什么时候自增了,里面没有一个顺序点)。
这样子的题目不应该出的,因为这个运算过程并没有c语言标准的相关规定,由具体的编译环境自行确定。
这样子的题目不应该出的,因为这个运算过程并没有c语言标准的相关规定,由具体的编译环境自行确定。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询