理解 Void 的大小
在 C 程式設計中,關鍵字 void 表示沒有大小的資料型態。這種奇特的屬性使其不適合變數宣告或記憶體分配任務。
編譯錯誤:空指標分配
您提供的程式碼片段:
void *p = malloc(sizeof(void));
會導致編譯錯誤,因為sizeof(void) 是C 中的無效表達式。 void 類型不攜帶大小訊息,使該操作未定義,因此被編譯器拒絕。
GCC 中的 Sizeof(void):異常
令人驚訝的是,sizeof(void) 表達式在 GNU 中編譯C 編譯器(GCC)。它的計算結果為 1,表示記憶體的一個位元組。然而,這種行為不是標準的,並且在不同的編譯器和體系結構中有所不同。
使用 Void 指標遞增指標
關於用 p 遞增 p 的問題提出了一個有趣的概念。由於 void 沒有大小,因此 p 操作變得毫無意義。指標 p 並未指向任何特定的資料類型或值,因此遞增它不會對其值產生任何影響。
綜上所述,C 中的 void 是沒有大小的資料類型,不能用於記憶體分配或變數宣告。 sizeof(void) 表達式通常無效,但在特定編譯器(如 GCC)中的行為可能有所不同。由於其大小不足,嘗試用 p 增加 void 指標沒有任何有意義的結果。
以上是為什麼 `sizeof(void)` 在 C 中無效,但在 GCC 中計算結果為 1?的詳細內容。更多資訊請關注PHP中文網其他相關文章!