几乎在所有的高级编程语言当中都存在自增自减这个操作,都知道“j= i++”的意思是先把i的值先付j,然后i自增,++i则是先自增后赋值,但是在更深层的程序里的运行模式却不是我们所想的那样。下面来探讨一下这个经典的用法在if(){}else{}条件判断语句中的运行机制:

1.作为单独语句存在时

int i = 0;
if(i++){code}

里面的code会执行么?no!

因为编译器会先执行判断i是否大于0,在执行i++,而现在i的初始值是0,所以里面的code是不会执行的。

int i = 0;
if(++i){code}

此时,编译器会先执行自增操作,再判断i是否大于0的操作,code正常执行。

2.作为语句的一部分时

int i=3,j=4;
if((j=i++)==4){code}

上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!==4不成立,最后执行i++,不执行code。

综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后。

转载于:https://www.cnblogs.com/andybruse/archive/2012/09/21/2701967.html

重新解释i++和++i相关推荐

  1. TCP三次握手和四次挥手的解释

    基础知识 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段. 它们的含义是: SYN ...

  2. java 解释型和编译型

    编译型语言和解释型语言 编译型语言: 举一个恰当的例子来理解,一本汉语的书,需要翻译成英文的书来帮助外国人理解,一种就是把正本书翻译完,然后给到外国人来阅读,这种方式就相当于编程中的编译型. 解释型: ...

  3. [翻译]Python中yield的解释

    问题: Python中yield关键字的作用是什么?它做了什么? 例如,我想理解以下代码 def node._get_child_candidates(self, distance, min_dist ...

  4. (康托展开解释)+ NYOJ 139 我排第几个

    描述 现在有"abcdefghijkl"12个字符,将其所有的排列中按字典序排列,给出任意一种排列,说出这个排列在所有的排列中是第几小的? 输入 第一行有一个整数n(0<n& ...

  5. 具体解释可变參数列表

    可变參数   至少有一个參数 比如:void add(int a,- ){} 例题  模拟printf()函数 #include <stdio.h> #include <stdarg ...

  6. 状态压缩dp(hdu2662)(我综合了一个人的解释和另一个人的代码)

    hoj 2662 大概题意是:有一个n*m的棋盘,在这个棋盘里边放k个旗子,要求每一行每一列都不能存在一对旗子相邻,问最后总共的方案数. 这道题一看状态非常多,就一定是状压.怎么状压呢?这又是个问题. ...

  7. java具有自动无用内存回收_Java语言程序设计(一)试卷及答案解释

    Java语言程序设计(一)试卷及答案解释 本试卷共6页,满分l00分,考试时间l50分钟. 第一部分选择题 一.单项选择题:本大题共l0小题,每小题l分,共10分.在每小题列出的备选项中只有一项是最符 ...

  8. jquery.datatable能返回数据绑不上_地磁场可以影响人体机能吗?解释有多种,但都不理想...

    信鸽辨别方向的能力特别强,即使上海的信鸽带到几千公里放飞,它仍然会飞回上海.路途中就是碰到狂风暴雨,它也不会迷失方向. 为什么它有这么大的辨别方向的本领呢?科学家对信鸽进行研究,做了这样一个有趣的实验 ...

  9. linux分区通俗讲解,linux硬盘分区基础及设备号的解释

    要了解linux分区,需要先明确一下主分区.扩展分区和逻辑分区这三个概念. 分区概念 主分区:一块物理硬盘上可以被独立使用的一部分,一个硬盘最多可以有4个主分区. 扩展分区:为了突破一个物理硬盘只能有 ...

  10. python采用解释方式执行_Python初学(一)

    <本系列性文章是根据一篇python教程来写的,如有侵权请联系管理员删除文章> 在学习Python之前要先知道什么是程序设计语言,也就是程序设计语言的概述是什么? 程序设计语言的概述: 程 ...

最新文章

  1. 【ACM】杭电OJ 2040
  2. PhD养成记 | 于歆杰:如何有效获取、归档和阅读文献
  3. eclipse svn异常:RA layer request failed 的解决方案
  4. 仿ArrayList功能的bag类
  5. bootstrap学习(一)栅格、布局
  6. matlab势场动态栅格路径规划,融栅格法和人工势场法的机器人三维路径规划
  7. Yandex浏览器安装crx插件
  8. 软件开发模式之敏捷开发(scrum)
  9. unity 反编译 step1 disUnity
  10. VS201X更换平台Rebuild项目时,旧平台生成的发布件被删除
  11. gif一键抠图 在线_在线抠图网站,轻松搞定抠图,效果堪比PS!
  12. 世界上最经典的25句话--摘抄
  13. 苹果又来割韭菜?一块擦屏布卖145元,这玩意到底是不是智商税?
  14. 数学建模之线性回归的标准型以及例题
  15. java如何避免恶意连续点击_浅谈一下如何避免用户多次点击造成的多次请求
  16. 从外包到React核心团队成员
  17. 亚马逊美国账号怎么注册?有什么条件?
  18. ValueError Unknown label type unknown
  19. 恒大健康:自称股东的FF员工提起集体诉讼 无理控告我们
  20. 圆钢材质名称和成分范围

热门文章

  1. typedef 指向函数的指针
  2. 基于RTP协议的数据通讯程序
  3. redis连接被拒绝
  4. python二维向量运算模拟_Python数学基础之向量定义与向量运算(附代码)
  5. 我的YUV播放器MFC小笔记:注册表读写
  6. Unable to establish loopback connection异常解决
  7. 【linux】Linux cp命令拷贝 不覆盖原有的文件
  8. 【flink】Flink 1.12.2 源码浅析 : StreamTask 浅析
  9. 【Flink】Flink 1.12.2 SlotManager
  10. 【java】动态高并发时为什么推荐重入锁而不是Synchronized?