我的核弹C++(二)i++与++i

        读大学时就很怕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;

       它们的联系与区别:

(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

        运行环境是VC6.0。因为C++标准对表达式的求解顺序不作规定,交给编译器决定,所以不同的编译器所决定的求解顺序是不同的。由上面的测试程序可以发现,VC6.0的求解顺序是从左向右。但是最后i或j的值都加了1。

(3)在for循环中i++与++i是同样的作用,因为相当于在循环结尾加上i++或++i,这两条语句是等价的。

  关于编译器的问题可以博客:http://blog.csdn.net/ljinddlj/article/details/1926678

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值