84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
请问各位大神,二维数组和三维数组的本质是神马?为啥要取多次*呢?那多维数组呢?对一维、二维、三维等数组名取地址取得是神马呢?请说得仔细点,本人小白,谢谢各位大神了
认证0级讲师
c中的多維數組應該是數組的數組,所以3維數組是元素為2維數組的數組,2維數組是元素為1維數組的數組.
int array[2][4][5]; int (*a)[4][5] = array; // 1) int (*b)[5] = array[i]; // 2) int (*c) = array[i][j]; // 3) int d = array[i][j][k]; // 4)
首先,要明確一點,1維數組的數組名就是1維數組的起始位址。
多維數組中取到的元素,除了最低維度,都可以認為是」數組名“,也就是數組的起始位址。例如A4中取A[2],那A[2]就是A4中第2(從0算起)個1維數組的起始位址。
然後我們從4)開始看,array[i][j][k]就是一個值,沒什麼問題吧。
array[i][j][k]
再來看3)array[i][j]表示的是在這個3維數組中,我選擇第i個2維數組,然後在這個2維數組中再選擇第j個1維數組,所以array[i][j]是這個1維數組的起始位址(可以理解為是1維數組的數組名),所以用int (*c)。
array[i][j]
int (*c)
跳過2)我們來看1),array是3維數組的數組名,所以也是3維數組的起始位址,因為它的元素是2維數組,所以我們用int (*a)[4][5]
array
int (*a)[4][5]
然後是很多*的問題:比如這個A[m][n]要訪問(i,j)那就是用*(*(A + i) + j),為什麼,A是2維數組數組名,所以是2維數組的起始位址,A + i是A的第i個元素的位址,取×得到其值,其值是一個1維數組,也就是這個1維數組的起始位址,(A + i) + j取得這個1維數組第j可元素的位址,然後再取得到這個值。
A[m][n]
(i,j)
*(*(A + i) + j)
A + i
本質都是數組啊,就像一維空間是一條直線,二維空間就是許多條直線,也就是說二維是由一維拓展得到的,三維以此類推。
c中的多維數組應該是數組的數組,所以3維數組是元素為2維數組的數組,2維數組是元素為1維數組的數組.
首先,要明確一點,1維數組的數組名就是1維數組的起始位址。
多維數組中取到的元素,除了最低維度,都可以認為是」數組名“,也就是數組的起始位址。例如A4中取A[2],那A[2]就是A4中第2(從0算起)個1維數組的起始位址。
然後我們從4)開始看,
array[i][j][k]
就是一個值,沒什麼問題吧。再來看3)
array[i][j]
表示的是在這個3維數組中,我選擇第i個2維數組,然後在這個2維數組中再選擇第j個1維數組,所以array[i][j]
是這個1維數組的起始位址(可以理解為是1維數組的數組名),所以用int (*c)
。跳過2)我們來看1),
array
是3維數組的數組名,所以也是3維數組的起始位址,因為它的元素是2維數組,所以我們用int (*a)[4][5]
然後是很多*的問題:
比如這個
A[m][n]
要訪問(i,j)
那就是用
*(*(A + i) + j)
,為什麼,A是2維數組數組名,所以是2維數組的起始位址,A + i
是A的第i個元素的位址,取×得到其值,其值是一個1維數組,也就是這個1維數組的起始位址,(A + i) + j取得這個1維數組第j可元素的位址,然後再取得到這個值。本質都是數組啊,就像一維空間是一條直線,二維空間就是許多條直線,也就是說二維是由一維拓展得到的,三維以此類推。