17 和 操作符分析

2021-10-01 23:51:58 字數 1248 閱讀 7460

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、++,--操作符的本質

1)++和--操作符對應兩條彙編指令

- 前置(先遞增,再使用數值)

*變數自增(減)1

*取變數值

- 後置(先使用數值,再遞增)

*取變數值

*變數自增(減)1

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

1)一對令人頭疼的兄弟

int i = 0;

(i++)+(i++)+(i++);

(++i)+(++i)+(++i);

你覺得這兩個表示式的值分別是什麼?

例項分析

令人頭疼的兄弟

17-1.c

#include int main()

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

1)c語言中只規定了++和--對應指令的相對執行次序  

2)++和--對應的彙編指令不一定連續執行           

3)在混合運算中,++和--的彙編指令可能被打斷執行 

++和--參與混合運算結果是不確定的。

警告:結果不確定,依賴於編譯器,要想學好一門語言必須深入了解編譯器。

4)筆試面試中的"奇葩"題

- 編譯器處理的每個符號應該盡可能多的包含字元

- 編譯器以從左向右的順序乙個乙個盡可能多的讀入字元

- 當讀入的字元不可能和已讀入的字元組合成合法符號為止

理解:盡可能多的讀入字元,組成合法使用的符號

例如,a+++b ===> (a++)+b

例項分析

貪心法閱讀示例

17-2.c

#include int main()

空格可以作為c 語言中乙個完整符號的休止符,編譯器讀入空格後立即對之前讀入的符號進行處理

注意:難怪敲**時有些時候要空格,尤其是運算。

小結:1)++和-- 操作符在混合運算中的行為可能不同

2)編譯器通過貪心法處理表示式中的子表示式

3)空格可以作為c語言中乙個完整符號的休止符

4)編譯器讀入空格後立即對之前讀入的符號進行處理

C 17 和 操作符分析

後置int i 0 i i i i i i 兩個表示式的值分別會是多少呢?例項分析 令人頭疼的兄弟 include int main 輸出 1 vc i 3 r 0 i 6 r 18 輸出 2 gcc i 3 r 0 i 6 r 16 分析 1 彙編 vc r i i i mov eax,dword...

C語言學習記錄17 和 操作符分析

和 操作符對應兩條彙編指令。1 前置 變數自增 減 1 取變數值 2 後置 取變數值 變數自增 減 1 vs和gcc不同 灰色地帶 結果分析 vs先加後自增。為什麼結果不確定?1 c語言中只規定了 和 對應指令的相對執行程式 2 和 對應的彙編指令不一定連續執行 3 在混合運算中,和 的彙編指令可能...

前置操作符和後置操作符

操作符可以被過載 全域性函式和成員函式均可以進行過載 過載前置 操作符不需要額外的引數 過載後置 操作符需要乙個int型別的佔位引數 來看乙個例子 include include using namespace std class test intvalue test operator test o...