算術運算子高! 表示式優先順序()(小括號) [](陣列下標) .(結構成員) ->(指標型結構成員)↑最高!(邏輯非) .(位取反) -(負號) ++(加1) --(減1) &(變數地址) │*(指標所指內容) type(函式說明) sizeof(長度計算) │*(乘) /(除) %(取模) │+(加) -(減) │>(位右移) │(大於) >=(大於等於) │==(等於) !=(不等於) │&(位與) │^(位異或) │|(位或) │&&(邏輯與) │||(邏輯或) │?:(?表示式) │= += -=(聯合操作) │,(逗號運算子) │最低 1. .的優先順序高於*。->運算子用於消除這個問題。 *p.f變成了*(p.f)而不是(*p).f2. []高於*,於是int *ap[]中的ap變成了元素為int指標的陣列。3. 函式()高於*,因此,int *fp()不再是函式指標了,而是一個函式,返回int *。4. 逗號運算子在所有運算子中優先順序最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。 逗號運算子的值是最右邊運算元的值,逗號運算子結合性從左至右,因此又稱為順序求值運算子。5. 在表示式中如果有布林操作、算術運算、位操作等混合計算,始終應該在適當的地方加上括號。 x = f() + g() * h(); 乘法先於加法執行,但是g()和h()的呼叫可能以任何順序出現。同樣,f()可能在乘法之前呼叫,也可能在乘法之後呼叫。 優先順序和結合性規則告訴你哪些符號組成一個意群,大部分這樣的意群內部如何進行計算的次序是未定義的。有些運算子,如&&和||等,其運算元的計算順序是確定的,它們使用短路原則。 C語言中記住兩個優先順序就夠了:乘法和除法先於加法和減法,在涉及其他運算子時一律加上括號。結合性用於在幾個運算子具有相同的優先順序時確定先執行哪一個。每個運算子擁有某一級別的優先順序,同時也擁有左結合性或者右結合性。 所有的賦值符(包括複合賦值符)都具有右結合性(從右到左執行),因此可以使用連等的賦值形式。唯一的三目運算子?:也是具有右結合性的。 所有優先順序相同的運算子,它們的結合性也相同,這是必須如此的。在函式呼叫中,各個引數的計算順序是不確定的
算術運算子高! 表示式優先順序()(小括號) [](陣列下標) .(結構成員) ->(指標型結構成員)↑最高!(邏輯非) .(位取反) -(負號) ++(加1) --(減1) &(變數地址) │*(指標所指內容) type(函式說明) sizeof(長度計算) │*(乘) /(除) %(取模) │+(加) -(減) │>(位右移) │(大於) >=(大於等於) │==(等於) !=(不等於) │&(位與) │^(位異或) │|(位或) │&&(邏輯與) │||(邏輯或) │?:(?表示式) │= += -=(聯合操作) │,(逗號運算子) │最低 1. .的優先順序高於*。->運算子用於消除這個問題。 *p.f變成了*(p.f)而不是(*p).f2. []高於*,於是int *ap[]中的ap變成了元素為int指標的陣列。3. 函式()高於*,因此,int *fp()不再是函式指標了,而是一個函式,返回int *。4. 逗號運算子在所有運算子中優先順序最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。 逗號運算子的值是最右邊運算元的值,逗號運算子結合性從左至右,因此又稱為順序求值運算子。5. 在表示式中如果有布林操作、算術運算、位操作等混合計算,始終應該在適當的地方加上括號。 x = f() + g() * h(); 乘法先於加法執行,但是g()和h()的呼叫可能以任何順序出現。同樣,f()可能在乘法之前呼叫,也可能在乘法之後呼叫。 優先順序和結合性規則告訴你哪些符號組成一個意群,大部分這樣的意群內部如何進行計算的次序是未定義的。有些運算子,如&&和||等,其運算元的計算順序是確定的,它們使用短路原則。 C語言中記住兩個優先順序就夠了:乘法和除法先於加法和減法,在涉及其他運算子時一律加上括號。結合性用於在幾個運算子具有相同的優先順序時確定先執行哪一個。每個運算子擁有某一級別的優先順序,同時也擁有左結合性或者右結合性。 所有的賦值符(包括複合賦值符)都具有右結合性(從右到左執行),因此可以使用連等的賦值形式。唯一的三目運算子?:也是具有右結合性的。 所有優先順序相同的運算子,它們的結合性也相同,這是必須如此的。在函式呼叫中,各個引數的計算順序是不確定的