指標與二維陣列

2022-07-31 17:42:12 字數 1233 閱讀 3379

二維陣列的本質:

int matrix[3][4];

int matrix[3][4];  ==> int [4] matrix[3];     令type為int[4];  type int[3]; 說明matrix是乙個陣列,有3個元素;每乙個元素是int [4]型別的;

實質上int[4]就是乙個擁有4個int元素的一維陣列。

指標加1移動的是該指標的指類長度。

例:double *p;

p+1  就是移動8位元組的長度。

matrix +1 移動了32b,&matrix[3][4]  + 1移動了8b,(matrix的指類是 double[4],&matrix[3][4]的指類是double);

c編譯器不會對指標指類進行嚴格檢查

scanf("%lf" , matrix);

scanf("%lf" ,*matrix); //兩個同樣是給二維陣列第乙個元素從鍵盤賦值。gcc執行&matrix[3][4]時出現警告,而*matrix不會,他們兩的型別是完全相同的。。

&matrix[i][0] => &*(matrix[i] + 0) =>matrix[i];

matrix[i]就是二維陣列第i行首位址。

二維陣列名稱,引用二維陣列元素的過程:

matrix[i][j] <=> (*(matrix + i))[j]

*(mareix + i) 中:

matrix + i將移動i * sizeof(double[4])位元組空間,即,跳躍i行元素!!!!

然後,*降其階,是*(matrix)的指類成為double,即,matrix[i]是指標,是下標為i的那一行的首位址,只是,其指類已經變成double!

(matrix[i])[j] <=> *((matrix[i] + j)

matrix[i] + j事實上移動了 j +sizeof (double)個位元組,即,在行內移動了j個double元素空間!

*(matrix [i] +j),對其指向的空間引用,實際上引用的就是matrix[i][j]!

關於&matrix

因為matrix的型別是double (*)[4],因此,&matrix的指類就是double (*)[4],那麼,&matrix + 1應該移動48位元組。

**檢驗如下;

#include

int main()

二維陣列與二維指標

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型別...

二維陣列與指標

1 二維陣列和陣列元素的位址若有以下定義 int p,a 3 4 注意此處的int,定義為2位元組長度大小 1 二維陣列a由若干個一維陣列組成,在c語言 中定義的二維陣列實際上是乙個一維陣列,這個一維陣列的每乙個成員又是乙個一維陣列。如以上定義的a陣列,則可視a陣列由a 0 a 1 a 2 等三個元...