读大学时就很怕i++和++i,只知道i++是先赋值再+1,++i是先+1再赋值。当然这种说法是都的,但是原理不知道,它们是什么时候赋值,什么时候+1我不清楚。大学时后,学习C语言用的是谭浩强的书,那本书对i++与++i的讲解个人认为比较难,容我吐槽下,我学完了,都没真正理解i++与++i(是我理解力差吗?)。
其实++和++i很简单:
它们都是i+1;
如果有表达式 a = i++ 它等价于 a = i ; i = i + 1;
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
它们的联系与区别:
运行环境是VC6.0。因为C++标准对表达式的求解顺序不作规定,交给编译器决定,所以不同的编译器所决定的求解顺序是不同的。由上面的测试程序可以发现,VC6.0的求解顺序是从左向右。但是最后i或j的值都加了1。(1)++i 和i++,在单独使用时,就是i=i+1,但是++i的效率高。
(2)++i和i++的区别仅仅在同一个语句中体现,只要同一个表达式执行完毕,两个表达式的效果是一样的,都是i自增1。
比如
i = 1;
a = i++;得到a= 1,i = 2;
i = 1;
a = ++i;得到 a = 2,i = 2;
同样的结果是i都自增1 .
对于下面这个代码:
int i=1,j=1,a,b;
a=(i++)+i*6;
b=(++j)+j*6;
/*a=i*6+(i++);
b=j*6+(++j);*/
printf("%d,%d\n%d,%d\n",a,i,b,j);输出结果是:7,2 14,2
当用/**/中的代码时,输出结果是:7,2 8,2
(3)在for循环中i++与++i是同样的作用,因为相当于在循环结尾加上i++或++i,这两条语句是等价的。
关于编译器的问题可以博客:http://blog.csdn.net/ljinddlj/article/details/1926678