二級指針和字符指針數組的區別

char *str[] = {"abc", "mike",  "hello"};
這是字符指針數組,每一個數組元素是一個指針變量,而每個指針變量指向字符串首字符地址,即是字符串的地址。因爲每一個字符串都代表的是一個地址,是字符串首字符的地址。字符串常量是放在文字常量區,是不可以更改的。而指針數組str裏面存放的是指向字符串地址,它是可變的。如str[0] 是可變的,它是指針變量,但是*str[0]是不可變的,它在試圖改變字符串常量"abc"的首字符中的a。

二級指針與字符指針數組是不同的,類似char **p = {"abc", "mike",  "hello"};是錯誤的。p只是一個二級指針變量,也僅僅是一個指針變量,只能放一個地址。

char *str[] = {"abc", "mike",  "hello"};
char **p = str;
這樣的寫法是正確,str代表的是這個指針數組的首元素地址,是一個指針。str = &str[0],而str[0]本身又是指向字符串"abc"的指針,所以指針的指針當然用二級指針來存放。

二級指針常用的用法是在函數傳參過程中。void fun(char *str[])這樣的函數,函數中的的形參編譯器會當作指針處理,不是數組,所以可以寫成void fun(char **str)

void fun(char **p);
void fun(char *p[100])
void fun(char *p[])
這三個是等價的,編譯器都是當作char **p處理的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章