c 中一個點的初始值是多少?
Texture* texture;
這個指標的值是多少,它是 nullptr 還是 NULL?我聽說作業系統可能會選擇這是真的,宣告這樣的指標是否安全?
uj5u.com熱心網友回復:
取決于分配的位置。如果是靜態的,則為 0。即像這樣
#include <stdio.h>
....
Texture* texture; // all statics are initialized to 0
在堆疊上,像這樣
int pooble(){
Texture* texture;
...
}
那么它的值是未定義的。使用它會導致未定義的行為
函式區域靜態也初始化為 0
int pooble(){
static Texture* texture; // =0
...
}
uj5u.com熱心網友回復:
C 語言沒有為指標指定任何初始值,使其未初始化可能會導致未定義的行為。一些編譯器將具有除錯模式,其中指標將被初始化為可能導致崩潰的值。
uj5u.com熱心網友回復:
c 中一個點的初始值是多少?
就像內置型別一樣,如果您不在本地/塊范圍內初始化指標,那么它將具有不確定的值。使用這個未初始化的指標變數將導致未定義的行為。
未定義的行為意味著任何事情1都可能發生,包括但不限于給出預期輸出的程式。但永遠不要依賴(或基于)具有未定義行為的程式的輸出。
這就是為什么建議:
始終在本地/塊范圍內初始化內置型別和指標。
也就是說,您應該初始化指標texture,如下所示:
Texture *texture = nullptr; //the pointer currently doesn't point to any Texture object
注意我在上面的陳述句中使用了nullptrand來初始化物件。NULLtexture
Bjarne Stroustrup 說,
我應該使用 NULL 還是 0?
在 C 中,NULL 的定義是 0,所以只有審美上的區別。我更喜歡避免使用宏,所以我使用 0。NULL的另一個問題是人們有時會錯誤地認為它不同于 0 和/或不是整數。在準標準代碼中,NULL 有時被/被定義為不合適的東西,因此必須/必須避免。這幾天不太常見了。
如果必須命名空指標,請呼叫它
nullptr;這就是它將在 C 0x中呼叫的內容。然后,nullptr將是一個關鍵字。
1有關未定義行為的更技術上準確的定義,請參見此處提到:對程式的行為沒有限制。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/433861.html
上一篇:將多個boost::asio::const_buffer合并為一個緩沖區
下一篇:簡化代碼片段-圓圈中的矢量旋轉
