C 與 C 中 指向二維陣列的指標進行指標運算

2022-06-03 16:30:09 字數 1745 閱讀 7226

二維陣列在概念上是二維的,有行和列,但在記憶體中所有的陣列元素都是連續排列的,它們之間沒有「縫隙」。以下面的二維陣列 nums 為例:

從概念上理解,nums 的分布像乙個矩陣,但在記憶體中,a 的分布是一維線性的,整個陣列占用一塊連續的記憶體:

1

int 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]

1

int 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 也代表該二維陣列的首位...