C 語言大量符號具有**上下文相關的多重含義** (符號重載),且運算符優先級繁多,是面試高頻考點,亦是「精通」分水嶺。
| 符號 | 含義 1 | 含義 2 | 含義 3 |
|---|---|---|---|
* | 聲明指針 int *p | 解引用 *p | 乘法 a * b |
& | 取地址 &a | 按位與 a & b | 引用聲明 (C++) |
- | 減法 a - b | 負號 -a | 指針相減 |
+ | 加法 a + b | 正號 +a | 指針加整數 |
< | 小於 a < b | 左移 a << b | 模板開頭 (C++) |
> | 大於 a > b | 右移 a >> b | 模板結尾 (C++) |
( ) | 函數調用 f() | 類型轉換 (int)a | 分組/優先級 |
[ ] | 數組下標 a[i] | 屬性修飾 (C++) | |
{ } | 代碼塊 | 初始化列表 | |
, | 參數分隔 | 逗號運算符 | 變量定義分隔 |
: | 標簽 label: | 三元運算符 ?: | 位域寬度 int a:4 |
; | 語句結束 | ||
# | 預處理指令 | 字符串化 #x | 連接符 ## |
. | 結構體成員 s.m | ||
-> | 指針訪問成員 p->m |
來源:《C專家編程》第三章總結。理解上下文語境是關鍵。
最佳實踐:寫代碼時**多加括號**;讀代碼時**查表**。但精通者需內化核心順序:
() [] -> . (最高,左結合)++ -- ! ~ +(正) -(負) *& sizeof (右結合)* / % → + - (左結合)<< >> (左結合)< <= > >= → == != (左結合)& → ^ → | (左結合)&& → || (左結合,! 屬單目)? : (右結合)= += -= *= /= %= &= ^= |= <<= >>= (右結合), (最低,左結合)a=b 改變 a,*p 改變指向內容,++i 改變 i,cond?x:y 結果不確定)。例外極少,掌握此二規則可覆蓋 99% 場景。