二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有「縫隙」。以下面的二維陣列 nums 為例:
從概念上理解,nums 的分布像乙個矩陣,但在記憶體中,a 的分布是一維線性的,整個陣列占用一塊連續的記憶體:
1int nums[2][3] = ;2//
以上定義與下邊相同
3int nums[2][3] = , };
在幾乎所有的程式語言中,二維陣列都是按行排列的,先存放 nums[0] 行,再存放 nums[1] 行,最後存放 numsa[2] 行;
c 與 c++ 中 允許把乙個二維陣列分解成多個一維陣列來處理。對於陣列 nums,它可以分解成兩個一維陣列,即 nums[0]、nums[1],每乙個一維陣列又包含了 3 個元素,例如 nums[0] 包含 nums[0][0]、nums[0][1]、nums[0][2]
1int nums[2][3] = ;23
int(*p)[3] =nums;
45 printf("
p = %d\n
", p ); //
指向第0行 第0個成員
6 printf("
*p = %d\n
", *p ); //
指向第0行 第0個成員,這裡加 * 號,取的是陣列指向元素的位址
7 printf("
*(*p) = %d\n
", *(*p) ); //
訪問第0行 第0個成員的值
8 printf("
p + 1 = %d\n
", p + 1 ); //
指向第1行 第0個成員
9 printf("
*(p + 1) = %d\n
", *(p + 1) ); //
指向第1行 第0個成員,這裡加 * 號,取的是陣列指向元素的位址
10 printf("
*(*(p + 1))= %d\n
", *(*(p + 1)) ); //
訪問第1行 第0個成員的值
11 printf("
*(p + 1) + 1 = %d\n
", *(p + 1) + 1 ); //
指向第1行 的第1個成員
12 printf("
*(*(p + 1) + 1) = %d\n
", *(*(p + 1) + 1) ); //
訪問指向第1行的第1個成員的值
列印結果:
p = 2029920*p = 2029920
*(*p) = 10
p + 1 = 2029932
*(p + 1) = 2029932
*(*(p + 1))= 40
*(p + 1) + 1 = 2029936
*(*(p + 1) + 1) = 50
C語言二維陣列指標(指向二維陣列的指標)
二維陣列的定義 int matrix 見圖的操作那篇文章裡面的定義 或者這篇文章提供了另外一種方法。二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有 縫隙 以下面的二維陣列 a 為例 int a 3 4 從概念上理解,a 的分布像乙個矩陣 0 1 2 3 4...
C 之指標指向二維陣列
一維指標通經常使用指標表示,其指向的位址是陣列第一元素所在的記憶體位址,例如以下 int ary 4 5 int aryp 5 ary 那麼ary 4 相當於int aryp 下面理解如此。但引數傳遞須要知道實參所在 的一維個數,所以傳遞的時候應該傳遞多乙個引數,子陣列的引用能夠理解 為 p 那麼取...
二維陣列與指向二維陣列的指標
指標陣列 是陣列元素為指標的陣列,本質為陣列。int p n 陣列指標 是指向陣列首元素的指標,其本質為指標。int p n 的優先順序高於指標運算子 操縱二維陣列 int a i j int pa j pa a a 代表該二維陣列的首位址 pa 代表該二維陣列的首位址 pa 也代表該二維陣列的首位...