介紹一下在 C語言中 ++*p, *p++和 *++p的不同。
++*p
1 |
|
*p++
1 |
|
*++p
1 |
|
++*p、*p++和 *++p是由 postfix ++(++在後)、prefix ++(++在前)和 *(deference)運算子組合而成,其運算優先權與關聯性為:
- prefix ++與 *的運算優先權相同,關聯性為從右到左。
- postfix ++的運算優先權高於 prefix ++與 *,關聯性為從左到右。
++*p
因 prefix ++與 *的運算優先權相同,因此從右到左,可視為是 ++(*p),將指標 p取值後加 1,結果為 v = 11, array[0] = 11, array[1] = 20, *p = 11。
*p++
因 postfix ++的運算優先權高於 *,可視為是 *(p++),將指標 p加 1,因為是 postfix,所以取的值為指標 p加 1之前所指向的值,結果為 v = 10, array[0] = 10, array[1] = 20, *p = 20。
*++p
因 prefix ++與 *的運算優先權相同,因此從右到左,可視為是 *(++p),將指標 p加 1後取值,結果為 v = 20, array[0] = 10, array[1] = 20, *p = 20。
Note
遇到 postfix ++的情況,可視為在執行完 ; 之後,才會執行 ++的運算。