C 複習之路四 表示式

2021-08-18 19:15:23 字數 2195 閱讀 3974

一、表示式的概念

表示式是由乙個或多個運算物件組成,運算物件之間可以通過運算子連線起來。

二、復合表示式

復合表示式是指含有兩個或者多個運算子的表示式。

【注意】復合表示式進行運算的時候要注意運算子的優先順序。

三、算數運算子的優先順序表

算數運算子(左結合律)

運算子功能用法+

-一元正號

一元負號

+ expr

- expr*/

%乘法除法求餘

expr * expr

expr / expr

expr % expr+-

加法減法

expr + expr

expr - expr

表中的算數運算子的優先順序從上往下依次減小!以上的運算子都滿足

左結合律,所以

當優先順序相同的時候,從左往右依次進行計算。

四、邏輯運算子和關係運算子

邏輯運算子和

關係運算子

結合律運算子

功能用法右!

邏輯非! expr左左

左左<

<=

>

>=

小於小於等於

大於大於等於

expr < expr

expr <= expr

expr > expr

expr  >= expr左左

==!=

相等不相等

expr == expr

expr != expr左&&

邏輯與expr && expr左||

邏輯或expr || expr

【注意】以上的9種運算子除了邏輯與(&&)和邏輯或(||)之外都沒有規定運算順序。

邏輯與、邏輯或的運算順序

邏輯與:當且僅當左側運算物件為真時才對右側運算物件求值。

邏輯或:當且僅當左側運算物件為假時才對右側運算物件求值。

五、賦值運算子

賦值運算子滿足右結合律

賦值運算子的優先順序比較低,低於關係運算子。

【注意】切勿混用賦值運算子(=)和相等運算子(==)!如果混用發生的錯誤是不容檢查出來的。

if(i == j)

判斷i和j是否相等,如果相等就進行相應的操作。否則不會進入if條件語句。

if(i = j)

這個是把j的值賦值給i,只要j的值不等於0,就可以進入if條件語句進行相應的操作。

六、遞增和遞減運算子

遞增運算子(++)遞減運算子(--),這兩個運算子分別為物件進行加一,減一操作。

它們有兩個版本,乙個是前置版本(++i),還有乙個後置版本(i--)

先來看一下這兩個版本有什麼區別

前置版本:

int i = 0, j;

j = ++ i; // j = 1 , i = 1;

後置版本:

int i = 0, j;

j = i++; // j = 0, i = 1;

通過以上的例子我們可以知道,

前置版本返回的是

遞增(或遞減)之後的值,但是

後置版本返回的是

遞增(或遞減)之前的值。

【注意】在相同的條件下,前置版本的效率通常高於後置版本的。因為後置版本需要將原始的值儲存下來,需要乙個臨時變數,但是前置版本值接就是返回遞增(或遞減)之後的值,不需要建立乙個臨時變數,所以效率會高一點。

混用解引用運算子和遞增運算子

來看乙個例子 

*p++;
【注意】後置版本的優先順序高於解引用運算子,所以以上的表示式可以寫成這樣*(p++); 這個表示式首先將p的值加一, 然後返回p的初始值的副本作為其結果,然後*解引用的就是p未加之前的值。

七、sizeof運算子

sizeof運算子返回的是一條表示式或者乙個型別名字所佔的位元組數。sizeof運算子滿足右結合律。

八、逗號運算子

逗號運算子含有兩個運算物件,按照從左向右的順序依次求值。

【注意】逗號運算子規定了運算物件的求值順序。

首先對左側的表示式求值,然後將求值結果丟棄,逗號運算子的真正結果是右側表示式的值。

複習C (十)表示式

c 中的每個表示式都有值,即使是賦值表示式 x 10 c 將賦值表示式的值定義為左側成員的值,所以可以有 a x 10 3 a的值為13。賦值運算子是從右向左結合的 通常cout會在顯示bool值之前把他們轉換為int。判定表示式時會先執行這個表示式 if i 這時在判斷i 時,i的值也改變了。這被...

C lambda表示式複習

include include include include using namespace std int main lambda表示式也就是乙個函式,我們可以把它賦給函式指標,也可以在後面加上括號使用。裡面可以新增一些限制lambda塊語句中使用外部變數的限制符。一共有四種情況 1.空白表示不...

正規表示式複習

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了regexp 物件的multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束位置...