5.3 我有一個 char * 型指針正巧指向一些 int 型變 量, 我想跳過它們。為什麼如下的代碼 ((int *)p)++; 不行?

在 C 語言中, 類型轉換意味著 ``把這些二進制位看作另一種類型, 並作相應 的對待"; 這是一個轉換操作符, 根據定義它只能生成一個右值 (rvalue)。而 右值既不能賦值, 也不能用 ++ 自增。(如果編譯器支持這樣的擴展, 那要麼是一個錯誤, 要麼是有意作出的非標準擴展。) 要達到你的目的可以用:
    p = (char *)((int *)p + 1);
或者,因為 p 是 char * 型, 直接用
    p += sizeof(int);

但是, 在可能的情況下, 你還是應該首先選擇適當的指針類型, 而不是一味地 試圖李代桃僵。

參考資料: [K&R2, Sec. A7.5 p. 205]; [ISO, Sec. 6.3.4]; [Rationale, Sec. 3.3.2.4]; [H&S, Sec. 7.1 pp. 179-80]。

翻譯朱群英、孫雲, LaTeX2HTML 編譯 朱群英 (2005-06-23)