i++和++i
来源:互联网 发布:数据库语句大全 编辑:程序博客网 时间:2024/05/17 09:22
在代码书中或课堂上我们都知道++i和i++在作为一个单独语句使用时没有区别,即相当于i=i+1; 而作为语句的一部分时,如a=++i; 和a=i++; ++i先执行加1操作,再执行赋值操作(因++在前),而i++是先执行赋值操作,再执行加1操作(因++在后)。但这种论述未将其中更深的运行机制讲出来,尤其是在if或while等判断语句中,下面对其进行探讨:
作为单独语句存在,如下面的两段代码:
上面的条件判断代码虽然是以单独语句出现,但编译器将其等价于i++(或++i)>0,故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行。
作为语句的一部分存在,如下面的一段代码:
上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后。
作为单独语句存在,如下面的两段代码:
int i=0;if(i++){...}
int i=0;if(++i){...}
上面的条件判断代码虽然是以单独语句出现,但编译器将其等价于i++(或++i)>0,故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行。
作为语句的一部分存在,如下面的一段代码:
int i=4,j=3;if((i=j++)!=4){...}
上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当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
- 探讨i++和++i
- 探讨i++和++i
- AS3实现单例模式举例
- 软件开发越来越不像工业,而更像农牧业
- 积分太少啦
- c++/c中free已经free过的内存会出现的现象
- 程序员之路——一个老程序员对刚上大学的学弟学妹的忠告
- i++和++i
- linux tar 打包命令
- 浮华落寂
- OpenGL变换顺序的理解
- C# Dictionary(字典)的键、值排序
- Oracle CHAR,VARCHAR,VARCHAR2,nvarchar类型的区别与使用
- 七夕情书之恋恋红尘
- 性感美女陪你读名言——《经典双语名言警句十篇》 (图)
- 推荐轻量级易用的3D建模软件Wings3D和Sculptris