未初始化和非法的指標

2021-06-23 09:59:55 字數 713 閱讀 2538

下面這個**說明了乙個極為常見的錯誤:

int  *a;

*a = 12;

警告:究竟a應該指向**。我們宣告了這個變數,但從未對它進行初始化,所以我們沒有辦法**12這個值儲存於什麼地方。從這一點看,指標變數和其他變數並無區別,如果變數是靜態的,它會被初始化為0.但如果變數是自動的,它根本不會被初始化。無論哪種情況,宣告乙個指向整形的指標都不會建立用於儲存整型值的記憶體空間。

null指標

標準定義了null指標,它作為乙個特殊的指標變數,表示不指向任何東西。要使乙個指標變數為null,你可以給它賦乙個零值。為了測試乙個指標變數是否為null,你可以將它與零值進行比較。之所以選擇零這個值是因為一種源**約定,就機器內部而言,null指標的實際值肯呢過與此不同。在這種情況下,編譯器將負責零值與內部值之間的翻譯轉換。

null指標的概念是非常有用的,因為它給了你一種方法,表示某個特定的指標目前尚未指向任何東西。例如,乙個用於在某個陣列中查詢某個特定值得函式可能返回乙個指向查詢到的陣列元素的指標。如果該數字不包含指定條件的值,函式就返回乙個null指標。這個技巧允許返回值傳達兩個不同片段的資訊。首先,有沒有找到元素,其次,如果找到,它是哪個元素。

對指標進行解引用操作可以獲得它所指向的值,但從定義上看,null指標並未指向任何東西,因此,對乙個null 指標進行解引用操作是非法的,在對指標進行解引用操作之前,你首先必須確保它並非null指標。

其實如果宣告乙個陣列的話,缺省會賦值為0!

未初始化和非法的指標

下面這個 段說明了乙個極為常見的錯誤 int a a 12 這個宣告建立了乙個名叫a的指標變數,後面那條賦值語句把12儲存在a所指向的記憶體位置。警告 但是究竟a指向 呢?我們宣告了這個變數,但從未對它進行初始化,所以我們沒有辦法 12這個值將儲存於什麼地方。從這一點看,指標變數和其他變數並無區別。...

未初始化指標

今天碰到個未初始化指標的問題。大意如下 class a public b m pb class b blah,blah,blah void func a pa b pb new b 初始化pb.pa m pb pb std vector a aptrs apters.push back pa fun...

未初始化的指標

1.我們定義了乙個指標,一定要初始化,比如 int a,沒有初始化時,a的指向是不明確的。若它指向非法位址,這時的操作會報異常 若它指向乙個合法位址,這是非常危險的,因為這樣可能更改乙個正在使用的數值。若在mcu中,指標指向非法位址,程式會跑飛。2.關於null指標,有時我們會寫乙個函式,這個函式返...