初學者常混淆優先級與結合性:
* 和 ++ 誰優先結合運算元。a - b - c 是 (a-b)-c 還是 a-(b-c)。++ 優先級 > 一元 *在 C 標準中,後綴運算子(++, --, (), [], ., ->)擁有最高優先級且左結合。一元運算子(*, &, +, -, ~, !)優先級較低且右結合。
*p++p(運算元)。++(後綴),優先級最高,結合 p → (p++)。* 作用於 (p++) 的結果 → *(p++)。結論:*p++ 絕對等價於 *(p++)。
| 表達式 | 操作順序 | 回傳值 | 副作用 |
|---|---|---|---|
*p++ / *(p++) | 1. 取 p 指向的值2. p 遞增 | 遞增前 p 指向的值 | p 指向下一個位置 |
(*p)++ | 1. 取 p 指向的值2. 該值遞增 | 遞增前 *p 的值 | *p 數值加 1 |
*++p | 1. p 遞增2. 取新位置的值 | 遞增後 p 指向的值 | p 指向下一個位置 |
++*p | 1. 取 p 指向的值2. 該值遞增 | 遞增後 *p 的值 | *p 數值加 1 |
val = *p; p++; 或 val = *p++;(慣用語)。(*p)++; 或 ++*p;。