初學者常見困惑:int a[5]={11,22,33,44,55}; int *p=a; printf("*p++ = %d\n",*p++); printf("*++p = %d\n",*++p); 兩者輸出不同,但運算符優先級均為「自右向左結合」,該如何理解?
*p++ 相當於 *(p++):先取值 11,再 p 指向 a[1]。*++p 相當於 *(++p):先 p 指向 a[2],再取值 33。「後綴先用後加,前綴先加後用」。結合運算符結合方向,實際執行順序由運算符類型決定,而非單純優先級。
理解指針運算關鍵在於區分「取值時刻」與「指針移動時刻」,畫圖模擬內存變化最直觀。