2014-02-23 70 views
1

由於未分配任何值的靜態變量聲明進入BSS代碼段。它會自動發起到零。c/C++中的靜態指針默認值

問題: 假設,如果聲明靜態指針沒有任何賦值,那麼是否應該爲地址或值爲零值?

+0

注意,dup只標記C. –

+0

看起來你對指針變量及其值有點困惑。請記住,**指針變量本身就是一個變量**,這意味着它有一個值,但在這種情況下,您可以使用它的值作爲地址。 –

回答

0

指針將指向地址零(大多數系統上爲NULL)。在將其用作指針之前,您仍然需要將其指向某個有效的地方(例如,來自malloc)。

+0

不,它將被初始化爲NULL指針值,無論它的表示是否爲零。對於指針,常數0轉換爲NULL指針值,而不是所有零的位模式。 –

9

在C靜態指針將被初始化爲空值,則draft C99 standard6.7.8初始化段落說:

具有靜態存儲持續時間沒有明確地進行初始化,則對象:

幷包括以下項目符號:

- 如果它有指針類型,則它被初始化爲空指針;

所以沒有分配存儲空間,它是一個空指針。還要注意它是一個實現定義的行爲,其中存儲了靜態變量。

the C++ draft standard相關的部分應該是爲8.5初始值設定款它說(重點煤礦):

如果一個對象沒有指定的初始化,對象是默認初始化;如果未執行初始化,則具有自動或動態存儲持續時間的對象具有不確定的值。 [注意:靜態或線程存儲時間爲 零初始化的對象,請參閱3.6.2。末端音符]

零初始化是覆蓋在段落它說:

要零初始化對象或類型T的參考是指:

並具有以下子彈:

- 如果T是一個標量類型(3。9)時,對象被設置爲值0(零),作爲一個積分常量表達式,轉換爲T;

其中腳註103說(重點礦山):

如在4.10指定,轉換整數表達式中,其值是0至在一個指針類型的結果空指針值