一道经典的C语言难题
背景:
相信很多人遇到过这样的问题: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);
各位试想答案将是多少?
大家先思考思考~ ~
答案分析:http://www.dotcpp.com/wp/tech/2016/09/self_increment.html
相信很多人遇到过这样的问题: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);
各位试想答案将是多少?
大家先思考思考~ ~
答案分析:http://www.dotcpp.com/wp/tech/2016/09/self_increment.html