若有二維陣列a:
char a[10]
[10]=
;
則a表示二維陣列本身,含有100個元素,也可認為含有10個一維陣列,每個一維陣列含有10個元素,其占有100位元組;a[0]表示二維陣列a的第乙個一維陣列,含有10個元素,其占有10位元組;a[1]表示二維陣列a的第二個一維陣列,含有10個元素,其占有10位元組;a[0][0]表示二維陣列a的第乙個元素,同時也是一維陣列a[0]的第乙個元素,其占有1位元組;a[1][0]表示二維陣列a的第十乙個元素,同時也是一維陣列a[1]的第乙個元素,其占有1位元組。
/**
*二維陣列位址,行位址,元素位址及對應的位元組數(即這個位址標記的儲存片段大小)
*/printf(,
&a,sizeof
(a))
;printf(,
&a[0],
sizeof
(a[0])
);printf(,
&a[1],
sizeof
(a[1])
);printf(,
&a[0][
0],sizeof
(a[0][
0]))
;printf(,
&a[0][
1],sizeof
(a[0][
1]))
;[1]));
執行結果:
可以發現,a位址、a[0]位址和a[0][0]位址相同。其實,在c語言中,陣列的位址用其首元素的位址表示,故a[0]的位址就是a[0][0]的位址,a的位址就是a[0]的位址;且在c語言中,用a來表示二維陣列a的位址,用a[0]來表示二維陣列a的第乙個一維陣列a[0]的位址;同理,a[1]的位址等於a[1][0]的位址,用a[1]來表示二維陣列a的第二個一維陣列a[1]的位址。當然,雖然位址一樣,其意義並不一樣,如在前文中a的位元組數,a[0]的位元組數,a[0][0]的位元組數並不相同。
/**
*陣列的位址等於其首元素的位址
*/printf(,
&a,a)
;printf(,
&a[0
],a[0]
);printf(,
&a[1
],a[1]
);printf(,
&a[0][
0],a[0][
0]);
printf(,
&a[0][
1],a[0][
1]);
printf(,
&a[1][
0],a[1][
0]);
執行結果:
取位址運算子&的結果是乙個指標,占用固定位元組的儲存空間
/**
*取位址運算子的結果是乙個指標,占用固定位元組的儲存空間
*/printf
("&a值 :%p ; &a位元組數:%d\na值:%p ; a位元組數:%d\n\n"
,&a,
sizeof
(&a)
,a,sizeof
(a))
;
在陣列中靈活運用*運算子和運算子
/**
*靈活運用*運算子和運算子
*/printf
("*a值:%p ; *a位元組數:%d\n"
,*a,
sizeof
(*a));
printf
("a[0]值:%p ; a[0]位元組數:%d\n"
,a[0],
sizeof
(a[0])
);printf
("**a值:%d ; *a位元組數:%d\n",*
*a,sizeof(*
*a))
;printf
("a[0][0]值:%d ; a[0][0]位元組數:%d\n"
,a[0][
0],sizeof
(a[0][
0]))
;printf
("*a[0]值:%d ; *a[0]位元組數:%d\n\n"
,*a[0]
,sizeof
(*a[0]));
執行結果:
可以見到,*a沒到陣列元素維度,值是位址(一維陣列a[0]),**a到了陣列元素維度,值是儲存的資料。
位址運算的結果是指標。a+1指「一維陣列」a的第二個元素的位址(此時a中的元素被認為是一維陣列),即一維陣列a[1]的位址,其本身是乙個指標;*(a+1)等同於a[1];*(a+1)+1即元素a[1][1]的位址,其本身是乙個指標;*(*(a+1)+1)等同於a[1][1]。
/**
*位址運算的結果是指標
*/printf
(,a+1,
sizeof
(a+1),
&a[1])
;printf
("*(a+1)值:%p ; *(a+1)位元組數:%d\n",*
(a+1),
sizeof(*
(a+1))
);printf
("a[1]值:%p ; a[1]位元組數:%d\n"
,a[1],
sizeof
(a[1])
);printf(,
*(a+1)
+1,sizeof(*
(a+1)+
1),&a[1]
[1])
;printf
("*(*(a+1)+1)值:%d ; *(*(a+1)+1)位元組數:%d\n",*
(*(a+1)+
1),sizeof(*
(*(a+1)+
1)))
;printf
("a[1][1]值:%d ; a[1][1]位元組數:%d\n"
,a[1][
1],sizeof
(a[1][
1]))
;
執行結果:
C語言二維陣列深度理解
二維陣列比較抽象,比較難理解,他的原理是則呢麼樣的呢與一維陣列之間有什麼聯絡呢?定義乙個二維陣列 a 3 3 我對於二維陣列的理解就是 乙個一維陣列a 3 儲存了3個位址,這三個位址分別是這二維陣列的三行的首位址這樣 p 1 1 與p 1 1 相同也就說的通了 p指標指向陣列a 最近幾天我有思考了一...
C語言二維陣列專題 理解二維陣列名
int array 2 2 這個二維陣列裡包含了兩個一維陣列,分別是,這個好理解,但是對於array和array 1這兩種寫法,該怎麼理解呢?這篇文章我就說說我自己的心得吧。include 編譯器名 tdm gcc 4.9.2 32 bit release 執行平台 windows xp 32bit...
C語言二維陣列
int main int argc,const char argv int array 5 建立乙個二維陣列 型別修飾符陣列名 包含幾個小陣列 每個小陣列有多少個元素 初始值如何寫?int array 3 4 一維陣列可以省略元素個數,二維陣列只能省略第一位 第乙個 3 可以不寫 第二種初始值寫法 ...