您好,登錄后才能下訂單哦!
數組指針: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]
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。