指標陣列和陣列指標

2021-09-29 22:05:15 字數 2020 閱讀 2468

容易混淆,在中間加『的』比較好理解,

即指標的陣列(表示陣列裡面全是指標);陣列的指標(表示這個指標是指向陣列的)。

目錄

(1)指標陣列:array of pointers,即用於儲存指標的陣列,也就是陣列元素都是指標

(2)陣列指標:a pointer to an array,即指向陣列的指標

(3)use

int *p1[5];

的優先順序高於*,所以p1先與結合,表示p1是個陣列,

「int*」修飾的是陣列的內容,即陣列的每個元素。

也就是說,該陣列包含 5 個指向 int 型別資料的指標,

如下圖,因此,它是乙個指標陣列。

如下**,

char *arr[4] = ;

//arr就是我定義的乙個指標陣列,它有四個元素,每個元素是乙個char *型別的指標,這些指標存放著其對應字串的首位址。

a:這個指標陣列有多大呢?

答案是16個位元組,因為它是乙個指標陣列。(這是廢話,正話下面說) 每當出現這些問題時,腦子裡一定要第一時間反應出記憶體映像圖如下:

這裡最左側一列是乙個很簡陋但能說明意思的記憶體圖,一般情況下,從棧區到**區,是從高位址到低位址。棧向下增長,堆向上增長。

b:arr[4]是乙個在主函式定義的陣列。把它對應到對應到記憶體中,arr是乙個在棧區,有四個元素的陣列,而每乙個陣列又是乙個指標,所以說它的四個元素各佔四個位元組,所以變數arr的大小是16個位元組。

那麼就有人問了?初始化arr的;的是什麼鬼? 

這四個不是什麼鬼,他們也存在在記憶體中,只是跟arr這個變數不在同一段空間,它們被分配在唯讀資料區,陣列arr[4]的四個指標元素,分別存放著這四個字串的首位址,想象一下,從棧區有四隻無形的手指向資料區的空間。arr+1會跳過四個位元組,。也就是乙個指標的大小 ,這就相當與定義char *p1 = 「hello」,char *p1 = 「world」,char *p3 = 「shannxi」, char *p4 = 「xian」,這是四個指標,每個指標存放乙個字串首位址,然後用arr[4]這個陣列分別存放這四個指標,就形成了指標陣列。

int (*p2)[5];

「()」的優先順序比「」高,「*」號和 p2 構成乙個指標的定義,指標變數名為 p2,而 int 修飾的是陣列的內容,即陣列的每個元素。

也就是說,p2 是乙個指標,它指向乙個int [5] 資料型別的陣列,

如下圖所示。很顯然,它是乙個陣列指標,陣列在這裡並沒有名字,是個匿名陣列。

既然p2是乙個指標,存放乙個陣列的位址,那麼在我們定義乙個陣列時,陣列名稱就是這個陣列的首位址,那麼這二者有什麼區別和聯絡呢?

int a[5];

a是乙個長度為5的字元陣列,a是這個陣列的首元素首位址。既然a是位址,p2是指向陣列的指標,那麼能將a賦值給p2嗎?

答案是不行的!因為a是陣列首元素首位址,p2存放的卻是陣列首位址,

a是int型別,a+1,a的值會實實在在的加1,而p2是int [5]型別的,p2+1,p2則會加4,

雖然陣列的首位址和首元素首位址的值相同,但是兩者操作不同,

char * msg[msg_num] = ,

,      //車次,採用單個數字變讀(1讀作么)模式,讀後恢復正常模式,,

,,,,

,,,,

,char型的指標陣列;

在字串的定義的時候用指標;

呼叫方式

void syn6288_speakstr(char *text,char musicid)

例如    syn6288_speakstr(msg[12],0);

指標陣列和陣列指標

有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 inta 1 int p a 指標的指標 int p2p p 簡單陣列 intb 20 指標陣列 int p 10 指標陣列,含有10個指標元素,即每乙個元素都是乙個指標 陣列指標 int p 10 這個指標用來指向...

指標陣列和陣列指標

理解這兩個概念,當從語言學的語法角度開始,定語 名詞,即 的 語句。指標陣列 指標的陣列 陣列指標 陣列的指標。一 指標陣列 元素為指標的陣列 顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。說明形式為 type pointer array constant1 constant2 co...

指標陣列和陣列指標

該文時自己對指標陣列用法的一點總結,還望高手指點不足原文如下 由於以前對指標陣列不太明白,所以自己寫了 乙個小的測試程式來驗證了自己的猜測,先總結如下 指標陣列,由名字就可以知道的該陣列中的成員都是為指標的。其定義的方法為 char p 5 該初定義乙個包含5個char 型別的陣列的指標,由於p本身...