|
|
发表于 2004-10-6 01:32:00
|
显示全部楼层
Re:问一个关于i++的幼稚问题
以下只适用debug中
在vc7.1中
结果是
4,3
printf ("%d,%d %d",i++,i++,i++);
这个是
5,4,3
printf ("%d,%d %d",i++,i,i++);
这个是
4,5,3
基础知识 i++ 构造了一个拷贝 然后再自加一
而++i没有拷贝
这就很好玩了
printf ("%d,%d %d",i++,i,i++);
估计是从右向左计算参数,
首先 最右面 i++
构造一个拷贝i 我们叫 i1 吧 值为 3
然后 i+=1; i值为4
中间不操作
最左面 i++
构造另外一个拷贝 就叫做i2吧 值为4
然后i+=1;i值为5
最后显示
三个其实数分别是 i2,i,i1
也便是 4,5,3了
因为i++要构造拷贝 所以比++i效率差
在能通用的时候尽量使用++i 特别是在大对象时候节省效率明显
printf ("%d,%d %d,%d,%d",i++,i++,++i,i,i++);
猜猜这个显示什么
编译一下看看是不是想的结果
|
|