++i和i++的区别
来源:互联网 发布:做淘宝云客服工资多少 编辑:程序博客网 时间:2024/05/18 15:57
如果有表达式 a = ++i 它等价于 i = i + 1; a = i;
1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值
2 ++i和i++都是分两步完成的。因为++i 是后面一步才赋值的,所以它能够当作一个变量进行级联赋值,++i = a =b,即 ++i 是一个左值(可被寻址的值);i++ 的后面一步是自增,不是左值。(2的两步分解与左右值的因果关系只是我的直觉,对错还待考证)
3 ++i 和i++ 的使用,一般来说在循环域里面,这两者并没有什么很大的区别,因为编译器一般都会给你做优化。但是要注意其生存周期,以及很难察觉的写脏,就好像指针delete以后一定要赋予0一样,我们要注意i值在程序流中的变化。
4 i=1 ; j=(++i)+(++i)+(++i); printf("J=%d/n",j); 这个结果是什么?没有结果,因为不同的编译器做出来的结果,我用vc6和gcc出来的结果是一样的,但是我坚信这么多不同编译器的优化规则都会导致这个怪异的结果。回过头来,这样coding,你会疯掉的,左手logic,右手biology千万别走火入魔!
5 我们来看看在++行为上表现迥异的c++程序和java程序
test.java
public class test{
public static void main(String args[]){
int i = 0 , j ;
for(j=0;j<5;j++){
i=i++; System.out.println("i="+i);
}
}
}
test.c
#include<stdio.h>
main(){
int i = 0 , j ;
for(j=0;j<5;j++){
i=i++ ; printf("i=%d/n",i);
}
}
test.java的结果是 i=0 i=0 i=0 i=0 i=0, test.c的结果是 i=1 i =2 i=3 i=4 i =5
为什么这样呢?其实不必太在乎啦,都是编译器惹的祸,java的编译器对于i = i++,相当于temp = i ; i = i+1 ; i = temp 所以现在我们明白了!而在C的编译机制里面i = i++ ,它只是做了i++这么一件事情!
- i++和++i的区别
- "i++"和"++i"的区别
- ++i 和 i++ 的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- ++i和i++的区别
- i++和++i的区别
- ++i和i++的区别
- i++和++i的区别
- i++和++i的区别
- ++i和i++的区别
- i++和++i的区别
- i++和++i的区别
- i++和++i的区别
- 谁帮我编写,把连接里的中文进行编码
- Android 类似未读短信图标显示数字效果的分析
- 批处理高级教程
- gluPerspective和gluLookAt的关系 (由于写的好我就转了)
- Mysql笔记
- ++i和i++的区别
- Windows垃圾文件清理(批处理BAT清理垃圾文件)
- FreeMarker整合Spring 3
- 如何适应我们的世界及面对这个信息爆炸的时代——关于“2014.12.06 一个理想者的创业故事IV”的思考
- Wallpaper HD-Christmas
- 今天买了本关于微信公众平台开发的书(惊现UpYun)
- 楼天城楼教主的acm心路历程(作为励志用)
- 《等概率随机函数 - 面试题总结》
- 安装或升级RAC时,组播测试工具mcasttest-tool