目錄
二維陣列、指標詳解:
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 ...