读书人

关于++i的有关问题

发布时间: 2012-09-10 11:02:32 作者: rapoo

关于++i的问题
int i=0,a;
a=(++i) + (++i);

最后的结果a为什么等于4;

在我的理解看来,i的初始值是0;当执行第一个表达式“++i”后,第一个表达式的值为1,同时i的值也增加为1;然后执行第二个表达式,“++i”,这时候表达式的值为2(i=i+1,此时i=1),i的值也为2;按照这样想,那结果就是1+2=3;


同样的还有一道问题,请各位高手解决:
int a,i=10;
a=(i++) + (++i) + (--i) +(i--);
printf("%d,a);

a的结果为42,我怎么也想不明白;
按照我的理解是这样的,i的初始值为10,执行"i++"后,i的值为11,但是表达式“i++”的值仍为10,然后算第二个表达式“++i”,由于之前算得i的值已为11,所以执行后,表达式“++i”的值为12,i的值为12;以此的思想,第三个表达式“--i”为11,i的值为11;第四个表达式“i--”的值为11,i的值为10;
那么结果就是“10+12+11+11=44”




我知道,我的思路一定是有错的,所以请大神指点,求解~~~!!!!!

[解决办法]
不要纠结了,这类问题都与编译器有关,所以为了避免歧义,类似的语句就不要出现在程序中了。。。。
[解决办法]
我真不明白到底要说几次楼主才能听见
“语言标准没有规定这类情况应该怎么办,编译器可以自行决定,哪怕直接报错也是它的自由”

因为VC和TC的结果一样,你就觉得答案是确定的?
GCC那个不一样的结果就被你无视了?

编程语言是被发明的,不是被发现的,它不是一个客观存在的标准,它的全部规则都由语言发明者或者标准制定委员会来决定
你觉得?你以为?你理解?你推导?这些全部都建立在“语言标准支持你推导”的基础上!
既然语言标准没有规定多个++出现在一个语句中的先后顺序,你以为它是怎样的顺序都无关紧要!
说得难听一点,别妄想了好吗?
[解决办法]
非要推导的话,麻烦你先解释一下,为什么数组名作为数组首地址使用,对数组名取地址的结果还是数组首地址?
这就是规定!这就是语言标准!标准规定的地方,再不合你的道理你也要乖乖接受!标准没规定的地方,你想怎么理解都是你的自由——但是编译器不保证配合你!

所以别再扯什么“我觉得哪个应该先算哪个应该后算”了
那种东西是你的个人想法,编译器是否和你想法相同是它的自由,就这么简单
[解决办法]
这种代码只有教科书中才会有

谁如果在实际工作种写出这种代码来

那就是对其他程序员的不尊重

写代码是为了给人看的

避免二义性,让代码简明易懂

必须的!

楼主忘记这些吧,因为正如楼上多位专家所言

这些结果都是依据编译器行为决定的

编译器就是这样写的,不需要解释

其实这种代码也是在难为编译器……

读书人网 >C语言

热点推荐