未初始化指標問題
阿新 • • 發佈:2019-09-15
《C和指標》書上說
int *a
...
*a = 12
這樣寫宣告一個變數,但未對指標初始化
如果指標是函式的形參,比如
void func(int *a)
{
(* a) = 12;//這樣操作有無問題?
}
=======================
樓主,你應該理解清楚什麼是指標:通俗的講,指標是一個地址,指標的初始化就是讓指標指向一個確定的地址。*是指標的解引用符,意思是取指標指向的地址裡的資料。
因此,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實際指向了一個未