关键词:++
和--
操作符的本质、++
和--
操作符使用分析、贪心法:++
和--
表达式的阅读技巧
1.++
和--
操作符的本质
-
++
和--
操作符对于两条汇编指令 - 前置:先将变量自增(减)1,然后取变量值
- 后置:先取变量值,然后将变量自增(减)1
2. ++
和--
操作符使用分析
#include <stdio.h>
int main()
{
int i = 0;
int r = 0;
r = (i++) + (i++) + (i++);
printf("i = %d, r = %d\n", i, r);
r = (++i) + (++i) + (++i);
printf("i = %d, r = %d\n", i, r);
return 0;
}
在vs下的输出结果:
i = 3, r = 0
i = 6, r = 18
在gcc下的输出结果:
i = 3, r = 0
i = 6, r = 16
总结:在vs编译器下和在gcc编译器下的输出结果不同,表达式r = (++i) + (++i) + (++i);在不同的编译器下运行方式不一样,在vs编译器下先执行三次
++i然后再做加法运算;再gcc编译器下,先执行两次
++i,然后做加法运算,然后再执行一次
++i`,然后再做加法运行。
- C语言中只规定了
++
和--
对应指令的相对执行次序 -
++
和--
对应的汇编指令不一定连续运行 - 在混合运算中,
++
和--
的汇编指令可能被打断执行 -
++
和--
参与混合运算结果是不确定的
3. 贪心法:++
和--
表达式的阅读技巧
- 编译器处理的每个符号应该尽可能多的包含字符
- 编译器以从左向右的顺序一个一个尽可能多的读入字符
- 当读入的字符不可能和已读入的字符组合成合法符号为止
- 空格可以作为C语言中一个完整符号的休止符,编译器读入空格后立即对之前读入的符号进行处理
4. 小结
-
++
和--
操作符在混合运算中的行为可能不同 - 编译器通过贪心法处理表达式中的子表达式
- 空格可以作为C语言中一个完整符号的休止符
- 编译器读入空格后立即对之前读入的符号进行处理
声明:此文章为本人在学习狄泰软件学院《C语言深度解析》所做的笔记,文章中包含狄泰软件资料内容一切版权归狄泰软件所有!