1. 程式人生 > >空指標,通用指標

空指標,通用指標

空指標是一個特殊的指標值,也是唯一一個對任何指標型別都合法的指標值。指標變數具有空指標值,表示它當時處於閒置狀態,沒有指向有意義的東西。空指標用0表示,C語言保證這個值不會是任何物件的地址。給指標值賦零則使它不再指向任何有意義的東西,使之不會因為未定義而指向了不該指的記憶體區域,而造成系統崩潰。為了提高程式的可讀性,標準庫定義了一個與0等價的符號常量NULL.    程式裡可以寫 p = 0;     或者 p = NULL; 兩種寫法都把p置為空指標值。相對而言,前一種寫法更容易使讀程式的人意識到這裡是一個指標賦值。

我們印象中C語言的指標都有型別,實際上也存在一種例外。這裡涉及到通用指標,它可以指向任何型別的變數。通用指標

的型別用(void *)表示,因此也稱為void 指標。
int n=3, *p;
void *gp;
gp = &n;
p=(int *)gp1;

通用指標void*,抽象的無型別指標,void *可以指向任何型別的資料;其出現只是為了一種抽象的需要;因為現實資料都是有型別的。
通常,只有相同型別的指標才可以直接相互賦值;而void*則不同,任何型別的都可以直接賦值給它,如void *p1;int *p2;p1 = p2;不需強制型別轉換;但這並不意味著void*可以任意直接賦值給其他型別如void *p1;int *p2;p2 = p1;(C編譯器可能不報錯,但C++中就必須強制轉換),因為“無型別”可以包容“有型別”,而“有型別”則不能包容“無型別”;