C語言筆記 第十七課 ++和-- 操作符分析
阿新 • • 發佈:2018-12-12
第十七課 ++和-- 操作符分析
++,- -操作符的本質
++和- -操作符對應兩條彙編指令
前置 變數自增(減)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語言中一個完整符號的休止符
編譯器讀入空格後立即對之前讀入的符號進行處理