C语言笔记 第十七课 ++和-- 操作符分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42187898/article/details/84969893

第十七课 ++和-- 操作符分析

++,- -操作符的本质

++和- -操作符对应两条汇编指令
前置 变量自增(减)1
取变量值
后置 取变量值
变量自增(减)1

++,- -操作符使用分析

int i = 0;
(i++) + (i++) + (i++); 0+1+2=3 i => 3
(++i) + (++i) + (++i); 4+5+6=15 i => 6 gcc编译为5+5+6=16
Windows:vc 10.0                          Linux:gcc                java
在这里插入图片描述
在这里插入图片描述
取出三个值,相加,加一                取出i的值,放到寄存器,0+0+0=0
0+0+0=0 1 2 3                                 再自增1, 1 2 3
在这里插入图片描述
i变量自增三次,变成6,再做两个        先自增两次,i=5,相加得10,再对变量自增1,
加法 6+6+6=18                                       i = 6,再做加法,5 + 5 +6 = 16
操作:VC10.0 打断点,右击,Go To Disassembly,查看汇编语言
          gcc 打断点,Debug As,1local C/C++Application
17-1 +±-程序—C语言的灰色地带

C语言中只规定了 ++ 和 - - 对应指令的相对执行次序

++ 和 - - 对应的汇编指令不一定连续运行

在混合运算中,++ 和 - - 的汇编指令可能被打断执行

++ 和 - - 参与运算结果是不确定的。

笔试面试中的“奇葩”题

1.++i+++i+++i
2.a+++b ==> a++ + b
a + ++b

贪心法:++,- -表达式的阅读技巧

编译器处理的每个符号应该尽可能多的包含字符
编译器以从左向右的顺序一个一个尽可能多的读入字符
当读入的字符不可能和已读入的字符组成合法符号为止
17.2 贪心法阅读示例
空格可以作为C语言中一个完整符号的休止符
编译器读入空格后立即对之前读入的符号进行处理
小结:
++ 和 --操作符在混合运算中的行为可能不同
编译器通过贪心法处理表达式中的子表达式
空格可以作为C语言中一个完整符号的休止符
编译器读入空格后立即对之前读入的符号进行处理

猜你喜欢

转载自blog.csdn.net/weixin_42187898/article/details/84969893