C 中一維陣列和二維陣列中的指標總結

2021-10-02 08:12:27 字數 1684 閱讀 6484

首先區別清楚指標陣列和陣列指標的區別

以名字後面的兩個字定性:

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 上面兩...