數組指針和指針數組的區別

數組指針: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<iostream>
using namespace std;
int main()
{
int a[4] = { 1,2,3,4 };
int
b[4]; //指針數組
int(c)[4]; //數組指針
c = &a; //讓c指向a的首地址
for (int i = 0; i<4; i++)
{
b[i] = &a[i]; //b數組的元素爲指針,即元素內容爲地址
}
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;
}
執行結果:
2
3

注意:定義了數組指針(c)[i],就必須給這個指針一個地址c=&a,不能不給指向(地址)就直接賦值((c)[i]=a[i]),否則會出錯
技巧:可以將數組指針的(*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<iostream>
using namespace std;
int main()
{
int a[3][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int(p)[4];
p = a;
cout << (
p)[0] << endl;
p++;
cout << (p)[0] << endl;
cout <<
((p)+1)<< endl; //((p)+1)相當於(p)[1] ,*p此時爲一個地址

}
執行結果:
1
5
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]

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