這個問題大家應該都碰到過,指標陣列和陣列指標,剛開始看時覺得還是能看懂,但是過些時又搞混了,最後發現還是沒有真正理解。
下面就簡單說說這兩個概念:
一:指標陣列,顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。
說明形式為:type *pointer_array[constant1][constant2]...[constantn];
例如:int *pai[3];
由於『*』是自右向左結合,因此從右向左看,首先看到[4]說明是乙個陣列,是乙個包含4個元素的陣列,然後看到『*』,顯然是指標型別,由此可以看出陣列中存放的是指標而不是一般的型別。同理,char *pac[2][3]是包含有6個元素,每乙個元素都是乙個字元型指標。再來說說他們的初始化:
int *pai[3];既然是乙個包含4個整形指標的陣列那麼其對應的將是乙個二維整形陣列,因為乙個整形指標對應乙個一維整形陣列。
那我就用乙個二維整形陣列來初始化它,事實上一般也都是這麼做的,這裡有乙個二維陣列,int arr[3][2]=,,},乙個三行兩列的整形陣列,注意這裡的行必須和你的指標陣列的維數一致,否則是不允許的,不信你可以試試。
這個初始化有很多種選擇,以下只列舉常見的兩中:
第一種也是很好理解的:
for(int i=0;i<3;i++)
pai[i]=arr[i];
顯然arr[i]是每一行的首位址,相當於乙個一維陣列的陣列名,如是把它送給乙個整形指標pai[i]是理所當然的了。
第二種方法:
在說明指標陣列時就初始化:int (*ap)[2]=,,};哈哈這個不用說了吧。
注意:不能將二維陣列的陣列名賦給指標陣列的陣列名,pai=arr(錯),因為兩者的型別不一致,二維陣列名的型別是指向int型的指標,而指標陣列的的陣列名是指向int *型別的指標。
在c/c++語言中,指標陣列最常用的場合就是說明乙個字串陣列。即說明乙個陣列,它的每個元素都是乙個字串。
二:陣列指標:指向乙個陣列的指標。
說明形式為:type (*pointer_array)[constant1][constant2]...[constantn];
注意這裡的圓括號是必須就將這是由於方括號,較指標說明符「*」的優先順序高,若無此圓括號,編譯器將把上述說明解釋成成了乙個陣列指標。
例如:int (*ap)[2];
這樣就說明了乙個指向包含有2個元素的整形陣列的陣列指標,聽起來確實有點彆扭。不過仔細分析應該還是能理解的,就是說ap是乙個指標,而它指向的物件是乙個指標,注意不要將它和乙個指向乙個整形變數的指標搞混了。
同樣以乙個二維陣列來說明其初始化問題,
int arr[3][2]=,,};注意這裡的列數必須和陣列指標所指的陣列的列數相同。
第一種方法:
ap=arr;
為什麼這裡能這樣將二維陣列名送給ap呢,你可以這樣理解,二維陣列不就可以看成是一維陣列的陣列嗎,而乙個陣列指標它指向的內容就是乙個一維陣列,那麼你就可以把這個陣列指標當做是乙個陣列名,只不過這個陣列裡的元素不是像int,char之型別的,而是乙個陣列,這樣你就可以把它和二維陣列的陣列名聯絡在一起了吧。文筆不行,不知道是否說清楚了。
第二種方法:
ap=&arr[0];
這裡arr[0]其實就是一維陣列的陣列名,將它的位址給ap是很自然的,因為ap本來就是指向乙個一維陣列的。
注意這裡不能這樣初始化:int (*a)[2]=,,};大家可以想想為什麼。
當然他們也可以動態賦值,由於篇幅就不**了。
指標陣列和陣列指標
有關陣列指標和指標陣列容易混淆,本文舉例說明兩者的區別,並加以分析。基本概念 指標 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本身...