指標陣列和陣列指標

2021-08-25 21:12:16 字數 1613 閱讀 4105

這個問題大家應該都碰到過,指標陣列和陣列指標,剛開始看時覺得還是能看懂,但是過些時又搞混了,最後發現還是沒有真正理解。

下面就簡單說說這兩個概念:一:指標陣列,顧名思義,就是說的首先是乙個陣列吧,然後陣列的元素是指標而已。 說明形式為: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本身...