首先區別清楚指標陣列和陣列指標的區別
以名字後面的兩個字定性:
1.指標陣列是乙個陣列,存貯著指標型別的變數,例如:
int *a[10];
因為的優先順序大於*,故首先是乙個含有10個元素的陣列,陣列中的元素是指向int型別的指標;
2.陣列指標是乙個指標,指向的物件是乙個陣列,例如:
int (*a)[10];
因為()的優先順序大於,故先確定a是乙個指標,指向的資料型別是乙個含有10個int型資料的陣列。
3.指向一維陣列中的指標
首先我們先看乙個一維陣列:
int a[3]=;//a是乙個陣列的名稱
cout<<*a《指標指向的資料型別是一維陣列,例如:
int *a;
int p[3] =;
a=p;
cout<<*a《輸出結果如下:
10x7ffd9a983420
0x7ffd9a983418
0x7ffd9a983420
0x7ffd9a983420
0x7ffd9a983420
4.二維陣列的指標:
如下,例一:
int x[4][3]=;
int (*p)[3] = x; //在宣告的時候,這裡指p是這樣一種指標型別:(*)[3],即指向3個int的指標(每次自增1的長度為3個int的長度)。不要做其他理解!!
cout << x << endl;
cout << (*p)[3] << endl;
cout << *p[3] << endl; // 的優先順序高於*,所以先解釋為p[3],即*(p+3),而p是指向3個int的指標,所以p+3指向(即儲存的位址),所以*(p+3)(即p[3])為10的位址,所以*p[3](即*(*(p+3)))為10
cout << *(*(p+3)) << endl;
cout <<&x《例二:
int a[2][3]=,};
int(*k)[3];
k=a;
cout<<"*(k+1)"<<*(k+1)
*(k+1)0x7ffe492326ac
*(*k+1)2
*(*(k+1))4
(k+1)0x7ffe492326ac
(*k+1)0x7ffe492326a4
(*(k+1))0x7ffe492326ac
&k0x7ffe49232698
*k0x7ffe492326a0
k0x7ffe492326a0
&a0x7ffe492326a0
*a0x7ffe492326a0
a0x7ffe492326a0
二維陣列 二維陣列和指標
include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...
二維指標和二維陣列
二維指標和二維陣列有三種形式 1,type ptr 2,type ptr或者type prt 3,type prt 三種形式意思相近,也有區別。首先三種形式都能表示二維的資料結構。1,type ptr 表示乙個指向指標的指標 但是在一開始宣告的時候 type ptr ptr到底指向幾個指標是不知道的...
C 的一維陣列和二維陣列
陣列 array 是一種資料格式,能夠儲存多個同型別的值。一維陣列 int a 3 char a 10 this is a 共有9個字元,包含空字元,a 9 將被系統自動賦值為 0 定義字元陣列,需要考慮到為最後的乙個結束符 0 預留出乙個位置,char陣列還可以這樣賦值 char a 10 上面兩...