一道简单的题目引发的思考 ++i 与i++ ——Don't believe in magic
Understand what your program do ,how they do
引言 昨晚一时兴起,我脑子就问自己下面的代码会输出什么,也不知道我脑子为什么有这个代码模型,只是模糊的有些印象: 01 #include 02 #include 03 04 int main(int argc,char** argv) 05 { 06 int i=3,j; 07 j=(i++)+(i++)+(++i); 08 printf("i = %d, j = %d\n",i,j); 09 exit(0); 10 } 您会怎样考虑这个问题呢
您不运行这个程序能准确地说出答案吗
我猜想肯定有大部分人不能肯定且准确地说出答案
如果您不能,这篇文章就是为你准备的,保证您看完之后豁然开朗
请细看下文,ou tline 如下: 1、诸君的回答 我那这道题目问了几个人,他们的答案不尽相同
1、A君的回答 因为i = 3,故依次i++=4,i++=5,++i=6,i 最后输出为i = 6;但是由于前面两个++是后置++,最后一个++是前置++,故j = 3+4+6 = 13
2、B 君的回答 因为i = 3,故第一个i++后为4,第二个i++后为5,接着做 i+i 操作 = 5+5=10,最后与(++i)相加 = 10+6=16
3、C 君的回答 因为i = 3,故依次i++=4,i++=5,++i=6,i 最后输出为i = 6;但是第一i、第二个i的++是后置++,先进行 i+i 操作,然后进行两次i++后置操作,故等价于(i)+(i) = 3+3=6,i++,i++,最后与++i=6 相加等于12
4、D 君的回答 因为i = 3,故依次i++=4,i++=5