背景
相信很多人遇到过这样的问题:printf("%d,%d",i++,++i);
也纠结过这个问题,到底答案是什么。却没有一个参考的资料。唯一知道的是,几乎所有C语言教材都这么讲:i++就是先使用i的值再使i自身加一,而++i则是先使i自身加一,然后再使用i的值。出于对真理的追求。今天我们彻底弄明白此问题。
譬如这样的话:
int a,b;
int i=10,j=10;
a=i++;
b=++j;
我们可以很清楚的知道a和b的值分别将是10和11。这点毫无疑问,因为无论在任何平台任何编译器上运行都是这个结果!
然而对于这样的程序:
int a,b;
int i=10,j=10;
a=(i++)+(i++)+(i++);
b=(++j)+(++j)+(++j);
各位试想答案将是多少?
我们可以放到编译器上运行看一下结果如下:
先看看windows下常用的VC6结果:
恩看到了,是30和37!嗯,但..这个结果好像有点怪。
那再看看Linux下gcc的结果:
哦,竟然也是30&nb