c语言基础之探讨i++和++i
来源:互联网 发布:ftp服务器软件 免费 编辑:程序博客网 时间:2024/05/12 16:56
最近笔者在调试代码时发现自己在对++运算符的理解上不够深入,导致一个不应有的bug的出现。
在代码书中或课堂上我们都知道++i和i++在作为一个单独语句使用时没有区别,即相当于i=i+1; 而作为语句的一部分时,如a=++i; 和a=i++; ++i先执行加1操作,再执行赋值操作(因++在前),而i++是先执行赋值操作,再执行加1操作(因++在后)。但这种论述未将其中更深的运行机制讲出来,尤其是在if或while等判断语句中,下面对其进行探讨:
- 作为单独语句存在,如下面的两段代码:
1
int
i=0;
2
3
if
(i++){...}
1
int
i=0;
2
3
if
(++i){...}
上面的条件判断代码虽然是以单独语句出现,但编译器将其等价于i++(或++i)>0,故在第一段代码中先执行i>0判定,再执行i++,因此条件体里的代码不被执行;而在第二段代码中先执行i=i+1,再执行i>0,因此条件里代码会被执行。
- 作为语句的一部分存在,如下面的一段代码:
1
int
i=4,j=3;
2
3
if
((i=j++)!=4){...}
上面的代码中括号()的优先级比!=的优先级高,但编译器仍然将++运算符最后执行。即先执行赋值语句i=j,然后判定(i=3)!=4成立,最后执行j++,接下去执行条件体里代码。
综上可知当i++作为单独条件语句进行判定时,即使没有显示地声明与0的比较,编译器仍将加上与0的比较;当i++作为复合语句使用时,不管++是否在优先级更高的运算符中,++仍然最后才执行,即在当前所在语句操作执行之后。
建议使用++,--时尽量不要混合使用,单句列出,以免出现逻辑混乱的情况。
- c语言基础之探讨i++和++i
- C++:探讨i++和++i
- (C)探讨i++和++i
- 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
- C语言之i++和i- -携手迷惑人
- C语言优先级和(i++)+(i++)与(++i)+(++i)
- 69.探讨i++和++i
- Xen虚拟机迁移domain方法
- 梅耶尔欲从5方面带雅虎走向胜利!
- Android:资源 id 及使用getIdentifier()获取资源Id
- java读取Excel文件
- xen虚拟机的启动过程
- c语言基础之探讨i++和++i
- 人人网JAVA笔试题解答
- 添加了一个服务,但无法在服务目录中找到该服务。
- WPF学习之控件与布局
- 不用获得焦点也能实现跑马灯效果的textView
- dos命令—将多个文件夹下的多个txt文件合并成为一个txt文件
- 关于http协议
- Synergy 1.4.9的安装使用
- 雅可比矩阵 和 海森矩阵