未初始化指標問題

2021-09-28 11:29:56 字數 631 閱讀 2407

《c和指標》書上說

int *a

...*a = 12

這樣寫宣告乙個變數,但未對指標初始化

如果指標是函式的形參,比如

void func(int *a)

樓主,你應該理解清楚什麼是指標:通俗的講,指標是乙個位址,指標的初始化就是讓指標指向乙個確定的位址。*是指標的解引用符,意思是取指標指向的位址裡的資料。

因此,int a; 

int *p = &a;  

// 這裡是初始化,表示的是指標初始化為a的位址,實際相當於 int *p; p = &a;

*p = 10;     

// 這是表示對指標解引用,想p所指向的位址寫入10

第2個是關於函式呼叫,乙個函式在那裡,並不會自己執行,只有你去呼叫它它才會執行。在函式呼叫發生時,c語言實際做的是用實際引數代替形參。

int *p;

func(p); // 在這裡(函式呼叫)的時候,實際相當於有如下過程:int *a; a = p;(實參代替形參);    *a = 10;   因此,這樣操作是否有問題,關鍵在於p(實參)本身是否有問題。如果p本身指向了乙個確切的位址,則a=p也使a(形參)實際指向了乙個確切的位址,如果p本身沒初始化,那麼a = p 也使a實際指向了乙個未初始化的位址。

未初始化指標

今天碰到個未初始化指標的問題。大意如下 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指標,有時我們會寫乙個函式,這個函式返...

未初始化和非法的指標

下面這個 說明了乙個極為常見的錯誤 int a a 12 警告 究竟a應該指向 我們宣告了這個變數,但從未對它進行初始化,所以我們沒有辦法 12這個值儲存於什麼地方。從這一點看,指標變數和其他變數並無區別,如果變數是靜態的,它會被初始化為0.但如果變數是自動的,它根本不會被初始化。無論哪種情況,宣告...