歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

解析數組名

解析數組名 作者:黑色印記

很多剛接觸C語言的朋友總會覺得數組和指針是十分復雜的,特別對於多維數組的問題,感到頭痛無比。我認為困惑大家的是對於數組名的理解不清晰所造成的。在這裡,我將從一維數組名,二維數組名,三維數組名,向大家解析其中的注意事項。

在進入正題前,我想讓大家知道,數組名是一個指針常量,保存的是首元素的地址。(因此,數組名不能做自加操作)

一維數組:

例:

int a [ 2 ] ;

a 保存的是數組首元素的地址 a +1,增加4個字節 

&a

保存的是數組的地址 a +1,增加8個字節

(一個是元素地址,一個是一維數組的地址,注意區分兩者的區別)

由  *(&a) = a

可知: 對數組的地址取值等於數組首元素的地址.

二維數組:

例:

int a[ 2 ] [ 2 ] ;

由於a是二維數組的數組名,所以它的首元素是一個一維數組。

a + i          第i個一維數組的地址

*( a + i ) + j  

第i個一維數組的第j個元素的地址

*(*(a + i) + j)

第i個一維數組的第j個元素的值

因為a是一維數組的地址,所以,要用數組指針來接。即:

int

(*pa)[ 2 ] = a ; pa + 1 ,加8個字節

因為&a是二維數組的地址,所以,要用二維數組指針來接。即:

int

(*pa)[2][2] = &a; pa + 1 , 加16個字節

三維數組:

例:

int a[2][2][2];

和二維數組同理,同學們可以嘗試自己理解一下。

a + i

第i個二維數組的地址

*(a + i) + j

第i個二維數組的第j個一維數組的地址

*(*(a + i) + j) + k

第i個二維數組的第j個一維數組的第k個元素的地址

int

(*pa)[2][2] = a; pa + 1, 加16個字節

int

(*pa)[2] = *a ; pa + 1,

加8個字節

int (*pa) = **a ;

pa + 1, 加4個字節

int

(*pa)[2][2][2] = &a; pa + 1,

加32個字節

如果用畫圖的方式表示數組中的元素,在內存中的存放方式,會更加容易理解,有條件的同學可以試一試。

Copyright © Linux教程網 All Rights Reserved