1. 程式人生 > >C語言筆記 第十七課 ++和-- 操作符分析

C語言筆記 第十七課 ++和-- 操作符分析

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

++,- -操作符的本質

++和- -操作符對應兩條彙編指令
前置 變數自增(減)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語言中一個完整符號的休止符
編譯器讀入空格後立即對之前讀入的符號進行處理