C 语言表达式怎么解z+=x>y?x++:y++这里运算顺序是怎么样的

问题描述:

C 语言表达式怎么解
z+=x>y?x++:y++
这里运算顺序是怎么样的
1个回答 分类:综合 2014-11-04

问题解答:

我来补答
+=,-=类似这样的符号,都是=号右边的是一个整体,可以理解成打了括号.也就是等同于这样的表达式.
z=z+(x>y?x++:y++);
=的优先级最低.括号中是一个三目表达式,先判断x>y的结果,成立则x++, 不成立则y++; 则表达式演变为:
z=z+x++; 或 z=z+y++;
现在就明白了吧, 先算z=z+x,然后x+1, 或者先算z=z+y, 然后y+1.
再问: 那这输出的z是不是不包含y+1的 就是顺序 z=z+y,y=y+1 还是z=z+y,y=y+1,z=z+1
再答: 要么z=z+y, y=y+1 要么z=z+x, x=x+1 执行哪个,要看x,y的值,然后通过比较x>y的。确实z的值不包括y+1或x+1的,因为++是后置的。z先算完再做y+1或x+1. 如果是++x,++y则不一样。
再问: 那输出是z+=x>y?x++:y++ printf("z= %d",z) 和printf(“z+=x>y?x++:y++ = %d",z+=x>y?x++:y++) 的输出结果不一样么
再答: 是一样的, 我怀疑你两句都执行了, 没有注释前面的, 导致x, y的值变了。因为你前面x和y可能某个加了1的。 后面再printf肯定不一样了。 你现在是不是结果相差了1? 那就是正常的。 你打印后面的那种printf的时候把前面两句注释掉。不然要么x++,要么y++了。
再问: 难道是这答案错了么 我怎么算都是10 x=6,y=6,z=3 printf(“z+=x>y?x++:y++ = %d",z+=x>y?x++:y++) 怎么算出来答案是9 最后的y++ 是不是这样就是10了 x=6,y=6,z=3 printf(“z+=x>y?x++:y++ = %d",z+=x>y?x++:y++) printf("z= %d",z)
再答: 当然是9了, 前面我说得很清楚了, ++是后置的, z=z+y++是先算出z=z+y的值,自然是9了,然后再是y=y+1, 那y变成7.
 
 
展开全文阅读
剩余:2000
上一页:指函数和对函数
下一页:字丑请见谅。