char 指針,也就是char *類型。 其初始化本質上與其它變量初始化沒有什么區別,就是賦予其一個初始化的值。
對於指針來說,在C語言中,就是一個地址。區分初始化情況,有四種表象:
1 初始化為空。即
char * str = NULL;
的形式,NULL在C語言中是特定的空指針,其值為0.在C語言中,以NULL作為指針的一個未生效狀態,其本身是一個非法的地址值。
2 初始化為常量字符串地址。
char * str = "test";
常量字符串在運行時會被放在常量空間中,於是這樣初始化后,地址是常量空間中的一個地址,對於該地址只能讀取,不可寫入。即str的值可以改,但是str指向的值是不可修改的。
在C語言里面,字符串是一段連續的字符,但是對於"hello"來說,這里的"hello"等同於數組名,所以即使見到printf ("%c","hello[2]);這樣的用法也不要奇怪。他等同於char a[10]="hello",printf ("%c",a[2]);
總之,記住,字符串整個寫出來在編譯器里等同於數組名。但是他和數組唯一的區別,他是只讀的。不能通過指針改變它。例如char *p="hello",p[2]='y',錯!字符串只讀,不能改變它。但是數組是可以改變的。
3 初始化為變量地址。
這里的變量地址,包括全局變量,局部變量的地址,以及通過動態分配申請到的內存地址。
這種情況下,對指針指向的空間是可以修改的。
4 不做初始化。
這種情況在C語言中是允許的。如果為全局變量或靜態局部變量,系統默認初始化為0值,即NULL。而對於局部變量,將是一個隨機值。所以如果是局部變量不做初始化,在取其指向空間值前,必須為其指定一個合法的值,否則訪問會出錯。