二維陣列 二維陣列和指標

2021-10-14 16:44:11 字數 1846 閱讀 3570

#include using namespace std;

int main()

如上面這段程式所示,通過取位址符 &,指標 p 獲得了變數 a 的位址,那麼解引用符 * 就可以從 p 中得到變數 a 的值。

也就是說,p=&a*p=a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p 中取出 a 的值,p 也就是變數 a 的位址。

#include using namespace std;

int main()

; int *p1 = data;

cout << p1[1] << endl; // 2

cout << *(p1+1) << endl; // 2

int *p2 = &data[0];

cout << p2[1] << endl; // 2

cout << *(p2+1) << endl; // 2

return 0;

}

一維陣列的陣列名是陣列的首位址,所以int *p1 = data;讓指標 p1 也指向了陣列首位址。這時候 *p1 是陣列的第乙個元素,*(p1+1) 也即是陣列的第二個元素。

又因為 *p1 是陣列的第乙個元素,說明 p1 是陣列第乙個元素的位址,所以int *p2 = &data[0];與上面等效。

#include using namespace std;

int main()

, , };

// 行指標

//int (*p)[3] = &data[0];

int (*p)[3] = data;

cout << p[1][2] << endl; // 6

cout << (*(p+1))[2] << endl; // 6

cout << *(p[1] + 2) << endl; // 6

cout << *(*(p+1)+2) << endl; // 6

return 0;

}

data[3][3] 相當於是陣列 data[data[0], data[1], data[2]],data[0], data[1], data[2] 都是有 3 個元素的一維陣列,而 data 則是有 3 個這樣陣列的一維陣列。

int (*p)[3] 表示行指標 p 指向乙個有三個元素的陣列,也就是指向外層陣列的首位址,而data&data[0]是等價的。第一次解引用得到它指向的陣列,第二次解引用才得到陣列中的值。

#include using namespace std;

int main()

, , };

// 列指標

//int *p = *data;

//int *p = data[0];

int *p = &data[0][0];

cout << p[1 * 3 + 2] << endl;

cout << *(p + 1 * 3 + 2) << endl;

return 0;

}

列指標是將二維陣列展開成一維陣列看待,所以列指標指向二維陣列的第乙個元素。&data[0][0]data[0]*data三者都代表第乙個元素的位址,訪問元素需要一次解引用,*等價。

二維指標和二維陣列

二維指標和二維陣列有三種形式 1,type ptr 2,type ptr或者type prt 3,type prt 三種形式意思相近,也有區別。首先三種形式都能表示二維的資料結構。1,type ptr 表示乙個指向指標的指標 但是在一開始宣告的時候 type ptr ptr到底指向幾個指標是不知道的...

二維陣列與二維指標

1.二維陣列的儲存是線性的,可以通過一維指標的方式訪問。如一下 int map 5 5 int mapd map 0 0 則 map i j mapd i 5 j 而利用二維陣列線性儲存的特性,可以將二維陣列當作一維指標方便的在函式之間傳遞 如 將乙個二維陣列賦值給乙個動態二維陣列,引數設定為一維指...

二維陣列與二維指標

一.指標與二維陣列 以martix 3 4 為例 1.二維陣列的本質 int martix 3 4 int martix 3 4 int 4 martix 3 令int 4 為type,type martix 3 為含有三個元素的陣列,每乙個元素型別為int 4 int 4 是乙個擁有4個int型別...