C 和C 中的空指標:揭示差異
使用指標時,C 和C 語法之間存在明顯的差異,特別是關於void 指標。在 C 中,允許將 void 指針指派給其他類型的指針,而在 C 中則需要明確強制轉換。
考慮以下範例:
<code class="c">int* p = malloc(sizeof(int));</code>
此程式碼可以編譯在 C 中成功,因為 malloc 傳回一個 void 指針,可以安全地將其分配給 C 中的整數指針。但是,在 C 中嘗試相同的操作將導致編譯錯誤。
但是,在不同的上下文中,以下程式碼在C 和C 中編譯都沒有問題:
<code class="c">void foo(void* vptr) { } int main() { int* p = (int*) malloc(sizeof(int)); foo(p); return 0; }</code>
此差異分別源自於C 和C 中的隱式和顯式指針轉換。在 C 中,這兩種轉換都是隱式的,允許在指標類型之間輕鬆轉換。然而,在 C 中,雖然從指標類型到 void 指標的轉換仍然是隱式的,但相反方向的轉換需要明確強制轉換。
C 語言參考手冊 (K&R2) 中強調了這種區別,其中明確指出規定僅支援從物件指標到 void 指標的轉換,而不會遺失資訊。
相較之下,C 標準規定了更嚴格的規則,要求在從 void 指標轉換為任何其他指標類型時進行明確強制轉換,從而確保類型安全並防止潛在的指標錯誤。
以上是C 和 C 中的空指標:為什麼型別轉換很重要?的詳細內容。更多資訊請關注PHP中文網其他相關文章!