C运算符优先级笔记
?1.?指針數組
int *p[5];
[] 大于 *
?2. 強制類型() 與 成員選擇(./->)
#include <stdlib.h>typedef struct
{int data;int time;
} data_t;int main()
{data_t *p = (data_t *)malloc(sizeof(data_t));int t = (data_t *)p->time; /*focus: -> 大于 (data_t)*/free(p);return 0;
}
int t = (data_t *)p->time;
這句代碼中 ->?優先級大于?(類型)強制類型轉換, 上述代碼編譯的話,會報警告:
main.c:12:13: warning: initialization of ‘int’ from ‘data_t *’ {aka ‘struct <anonymous> *’} makes integer from pointer without a cast [-Wint-conversion]
3. 按位運算符(&/|) 與 邏輯運算符(&&/||)
if (r8->bit_mask & ie_m_present ||r9_present)
{}
?位運算符 高于 邏輯運算符
4 取值運算符* vs 后置自增運算符++
int *p = (int? *)malloc(sizeof(int));
*p = 10;
*p++; // ++ 先于 *
參考
| 優先級 | 運算符 | 名稱或含義 | 使用形式 | 結合方向 | 說明 |
| 1 | [] | 數組下標 | 數組名[常量表達式] | 左到右 | |
| () | 圓括號 | (表達式)/函數名(形參表) | |||
| . | 成員選擇(對象) | 對象.成員名 | |||
| -> | 成員選擇(指針) | 對象指針->成員名 | |||
| 2 | - | 負號運算符 | -表達式 | 右到左 | 單目運算符 |
| (類型) | 強制類型轉換 | (數據類型)表達式 | |||
| ++ | 前置自增運算符 | ++變量名 | 單目運算符 | ||
| ++ | 后置自增運算符 | 變量名++ | 單目運算符 | ||
| -- | 前置自減運算符 | --變量名 | 單目運算符 | ||
| -- | 后置自減運算符 | 變量名-- | 單目運算符?[4]? | ||
| * | 取值運算符 | *指針變量 | 單目運算符 | ||
| & | 取地址運算符 | &變量名 | 單目運算符 | ||
| ! | 邏輯非運算符 | !表達式 | 單目運算符 | ||
| ~ | 按位取反運算符 | ~表達式 | 單目運算符 | ||
| sizeof | 長度運算符 | sizeof(表達式) | |||
| 3 | / | 除 | 表達式/表達式 | 左到右 | 雙目運算符 |
| * | 乘 | 表達式*表達式 | 雙目運算符 | ||
| % | 余數(取模) | 整型表達式/整型表達式 | 雙目運算符 | ||
| 4 | + | 加 | 表達式+表達式 | 左到右 | 雙目運算符 |
| - | 減 | 表達式-表達式 | 雙目運算符 | ||
| 5 | 左移 | 變量 | 左到右 | 雙目運算符 | |
| >> | 右移 | 變量>>表達式 | 雙目運算符 | ||
| 6 | > | 大于 | 表達式>表達式 | 左到右 | 雙目運算符 |
| >= | 大于等于 | 表達式>=表達式 | 雙目運算符 | ||
| 小于 | 表達式 | 雙目運算符 | |||
| 小于等于 | 表達式 | 雙目運算符 | |||
| 7 | == | 等于 | 表達式==表達式 | 左到右 | 雙目運算符 |
| != | 不等于 | 表達式!= 表達式 | 雙目運算符 | ||
| 8 | & | 按位與 | 表達式&表達式 | 左到右 | 雙目運算符 |
| 9 | ^ | 按位異或 | 表達式^表達式 | 左到右 | 雙目運算符 |
| 10 | | | 按位或 | 表達式|表達式 | 左到右 | 雙目運算符 |
| 11 | && | 邏輯與 | 表達式&&表達式 | 左到右 | 雙目運算符 |
| 12 | || | 邏輯或 | 表達式||表達式 | 左到右 | 雙目運算符 |
| 13 | ?: | 條件運算符 | 表達式1? 表達式2: 表達式3 | 右到左 | 三目運算符 |
| 14 | = | 賦值運算符 | 變量=表達式 | 右到左 | |
| /= | 除后賦值 | 變量/=表達式 | |||
| *= | 乘后賦值 | 變量*=表達式 | |||
| %= | 取模后賦值 | 變量%=表達式 | |||
| += | 加后賦值 | 變量+=表達式 | |||
| -= | 減后賦值 | 變量-=表達式 | |||
| 左移后賦值 | 變量 | ||||
| >>= | 右移后賦值 | 變量>>=表達式 | |||
| &= | 按位與后賦值 | 變量&=表達式 | |||
| ^= | 按位異或后賦值 | 變量^=表達式 | |||
| |= | 按位或后賦值 | 變量|=表達式 | |||
| 15 | , | 逗號運算符 | 表達式,表達式,… | 左到右 | 從左向右順序運算 |
總結
- 上一篇: C 变量的作用域
- 下一篇: 求冻字开头的成语接龙!