指針是 C 語言的核心也難點,結合後置遞增運算符 ++ 時極易產生誤解。以下代碼輸出為何是 4,4 而非 3,4?
int a = 0, *ptr;
ptr = &a;
*ptr = 3;
a = (*ptr)++;
printf("%d,%d\n", a, *ptr); // 輸出 4,4
int a = 0, *ptr; 定義整型變量 a 與整型指針 ptr。ptr = &a; ptr 指向 a 的地址。*ptr = 3; 通過指針修改 a 的值為 3,此時 a = 3。a = (*ptr)++; 關鍵步驟:
(*ptr) 取值為 3。++ 先使用當前值(3)參與賦值,再將 *ptr 所指內存值加 1 變為 4。*ptr 即 a,所以 a 先被賦值為 3,隨即因指向同一地址而變為 4。*ptr = 4,輸出 4,4。*ptr 即修改 a。= 優先級低於後置 ++,但 (*ptr)++ 作為右值整體參與賦值。a = a++ 行為未定義)。a = *ptr; (*ptr)++; 邏輯清晰無歧義。指針與運算符結合是考試與面試高頻考點,務必掌握運算順序與副作用機制。