二維陣列 指標詳解

2021-08-30 17:40:21 字數 2370 閱讀 8253

目錄

二維陣列、指標詳解:

1.研究二維陣列的表示。

2.現在研究關於二維陣列和指標的關係

首先,用**執行進行測試,驗證的相關結果,

// c.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include using namespace std;

int main()

, ,

};cout <

cout << a << endl << endl;

cout << " a[0] *(a+0) *a" << endl;

cout << a[0] << " " << *(a+0) << " " << *a << endl << endl;

cout << " &a[1] a + 1 " << endl;

cout << &a[1] << " " << a + 1 << endl << endl << endl;

cout << " a[1] *(a + 1) " << endl;

cout << a[1] << " " << *(a + 1) << endl << endl;

cout << " a[1] + 2 *(a + 1) + 2 " << endl;

cout << a[1] + 2 << " " << *(a + 1) + 2 << endl << endl << endl;

cout << " *(a[1] + 2) *(*(a + 1) + 2) " << endl;

cout <

return 0;

}

得到結果:

由此可以得出如下結果【仔細看清池一下的**】:

雖然列印出來的結果一樣,但是其含義不同,其資料型別可能不一樣。且指標接收的值,不是說傳遞乙個位址進去就可以得。還要其型別對應的上。指標之所以為派生型別,是因為其必須依靠基本資料型別才能夠使用(參見本人的這篇部落格資料型別、儲存結構、static、extern)。

二維陣列a有關的指標

含義位址

資料型別

a二維陣列名,指向一維陣列a[0],即0行的首位址

008ffaa4

int (*)[4]

a[0],  *(a+0), *a

0行0列的位址

008ffaa4

int *

&a[1],  a+1

1行首位址

008ffab4

int (*)[4]

a[1],  *(a+1)

1行0列元素,a[1][0]的位址

008ffab4

int *

a[1]+2,  *(a+1)+2

1行2列元素,a[1][2]的位址

008ffabc

int *

*(*a[1]+2),  *(*(a+1)+2)

1行2列元素,a[1][2]的值

13怎麼賦初值呢? 給乙個二維陣列。

正確賦值方式:

方式一:int(*p)[4] = a; 

方式二:int(*p)[4] = &a[0];

容易錯誤的方式

錯誤一:int(*p)[4] = a[0];     

錯誤二:int(*p)[4] = &(a[0][0]);

那麼由此可以得出結論,重點來了,敲黑板!!!【可以參考c程式設計 p250】

a[0], a[1], a[2]的型別為 int * 型別(指向整型變數);

而a的型別為 int (*)[4],指向 含有四個元素的 一維陣列。

感覺此表比較重要,重點是容易理解。再回顧一遍。[和上面的是同乙個表]

要理解這兩者之間的關係,關鍵是要自己能夠理解:

指標與二維陣列詳解

二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布像乙個矩陣 0 1 2 3 4 5 6 7 8 9 10 11 但在記憶體中,a 的分布是一維線性的,整個陣列占用一塊連續的記憶體...

陣列指標與二維陣列詳解

前言 1 如何識別二維陣列。假設陣列為a 2 5 二維陣列肯定是有兩個維度,從左到右看 2 是第乙個維度,表示a這個陣列裡有兩個元素。5 是第二個維度,需要進入內部觀察。第乙個維度的每個元素的內部有5個int型的元素。2 陣列名代表陣列首元素的位址 這句話既適用於一維陣列,也適用於二維陣列。1 對於...

二維陣列 二維陣列和指標

include using namespace std int main 如上面這段程式所示,通過取位址符 指標 p 獲得了變數 a 的位址,那麼解引用符 就可以從 p 中得到變數 a 的值。也就是說,p a和 p a是等價的。p 是變數 a 的位址,從 p 中就可以取出 a 的值。反之,能從 p ...