首頁 > 後端開發 > C++ > 取消引用 NULL 指標以獲得 C 中定義的行為的參考嗎?

取消引用 NULL 指標以獲得 C 中定義的行為的參考嗎?

DDD
發布: 2024-12-07 06:59:12
原創
236 人瀏覽過

Is Dereferencing a NULL Pointer to Obtain a Reference Defined Behavior in C  ?

解引用NULL 指標以供參考:解釋和標準

在C 中,以下程式碼提出了標準規定的問題:

int* ptr = NULL;
int& ref = *ptr;
int* ptr2 = &ref;
登入後複製

具體來說,是否允許取消引用NULL指標來取得引用,這樣的操作的結果是什麼?

標準解釋

根據 C 標準,取消引用 NULL 指標被視為未定義行為。標準第8.3.2/4 節明確說明了這一點:

注意:特別是,空引用不能存在於明確定義的程序中,因為創建此類引用的唯一方法是將其綁定到透過取消引用空指標所獲得的“物件”,這會導致未定義的行為。

實作意義

然而,在實踐中,許多編譯器透過將結果設為 NULL 來實現此行為。這意味著所提供的程式碼片段中的 ptr2 將被賦予 NULL 值。

編譯器解釋

需要注意的是,上述行為不能由標準,並且可能因不同的編譯器和平台而異。例如,某些編譯器在取消引用 NULL 指標時可能會引發例外狀況或執行其他特定於平台的操作。

特定異常

此規則的例外是使用NULL 指標上的 sizeof 運算子。在這種情況下,取消引用實際上不會發生,且 sizeof 可用於確定類型的大小,而不會導致未定義的行為。

以上是取消引用 NULL 指標以獲得 C 中定義的行為的參考嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板