如题
int x=8,k;
k=(x++)+(x++)+(x++);
问最后 k 的值和 x的值各是多少
这个问题争议好大,也好无聊,但最后去测试大家的答案都对了,这是怎么回事呢?
这里列出 C# 和C/C++的比较
先明确一点x++ 的意思是 先使用完x然后x自加1,对吧,这里有个问题,x什么时候才是使用完呢?
看c#的
k=(x++)+(x++)+(x++);这里 () 和x++ 的运算优先级是一样的,所以当x跳出()后就表示x已经使用完了,那么它可以加1了
所以就成了k=8+9+10 此时最后一个括号的x也使用完了那么它要再加1, 所以 k=27,x=11
看 c 的
k=(x++)+(x++)+(x++);这里 () 的运算优先级别比x++ 大一级,所以当x跳出第一个()后表示它还没使用完呢,接着连续跳出两个(),
所以就成了k=8+8+8 三个括号跳出来后x才是使用完了,这个时候它才加1,因为有三个++ 所以必须加三次,所以 k=24,i=11
鄙人浅解,但是问的人好郁闷,我也好郁闷!
还有像 k=(x++)+(++x)+(x++);k=(++x)+(++x)+(x++);等等的问题都是一样,自己跑一下程序等于多少就多少,何必追究那么多呢!