陣列指標和指標陣列的區別

2021-08-20 00:14:10 字數 1747 閱讀 1590

陣列指標:a pointer to an array ,指向陣列的指標

指標陣列:array of pointer ,用於儲存指標的陣列,即陣列元素都是指標

int (*p)[6]    陣列指標  :表示指向陣列a的指標  元素表示:(*a)[i]  (指向一維陣列的指標,也成行指標)

int* p[6]     指標陣列  :表示陣列a中的元素都是int *型,即int型指標   元素表示:*(a[i]) 或者*a[i] (優先順序高於*)

**:#include

using namespace std;

int main()

;int* b[4];  //指標陣列

int(*c)[4];  //陣列指標

c = &a;    //讓c指向a的首位址

for (int i = 0; i<4; i++)

cout << *b[1] << endl;  //b[1]=&a[1],即b[1]中為位址(該位址中存入的是資料2) , *b[1]即取&a[1]中的元素內容,即2

cout << (*c)[2] << endl;//可將(*c)看成陣列名,相當於a,(*c)[2]=a[2],即為3

return 0;

}執行結果:23

技巧:可以將陣列指標的(*c)看成乙個陣列名使用

陣列指標

int (*p)[6]  ()優先順序高,說明p是乙個指標,指向乙個int型的一維陣列,這個陣列的長度是n,也就是p的步長為n,執行p+1(p要跨過n個整型資料的長度)

int a[3][4];

int (*p)[4];   //定義乙個陣列指標,指向含4個元素的以為陣列

p=a;   //將二維陣列a的首位址賦給p,即a[0]或&a[0][0]

p++;   //該語句執行後,即p=p+1,p跨過行a[0]指向了行a[1]

#include

using namespace std;

int main()

,,};

int(*p)[4];

p = a;

cout << (*p)[0] << endl;

p++;

cout << (*p)[0] << endl;

cout << *((*p)+1)<< endl;   //*((*p)+1)相當於(*p)[1]  ,*p此時為乙個位址

}執行結果:15

6指標陣列int* p[n]

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它由n個指標lexington的元素組成(這裡執行p+1是錯誤的,這樣賦值也是錯誤的:p=a,p是個不可預知的表示,只存在p[0],p[1]….p[n-1],它們分別是指標變數可以用來存放變數位址),可以這樣*p=a;這裡*p表示指標陣列第乙個元素的值,a的首位址的值

int *p[3];    //表示乙個一維陣列內存放著三個指標變數,分別是p[0],p[1],p[2]

int a[3][4];

for(i=0;i<3;i++)

p[i]=a[i];

ps:陣列指標只是乙個指標變數,它占有記憶體中乙個指標的儲存空間,指標陣列是多個指標變數,以陣列形式存在記憶體中,占有多個指標的儲存空間

指標陣列要表示陣列中第i行第j列的元素:

*(p[i]+j)   *(*(p+i)+j)  (*(p+i))[j]  p[i][j]

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...

陣列指標和指標陣列的區別

陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...