c++ - C语言多维数组问题,本人小白刚学c
PHP中文网
PHP中文网 2017-04-17 15:28:07
0
2
656

请问各位大神,二维数组和三维数组的本质是神马?为啥要取多次*呢?那多维数组呢?对一维、二维、三维等数组名取地址取得是神马呢?请说得仔细点,本人小白,谢谢各位大神了

PHP中文网
PHP中文网

认证0级讲师

全部回覆(2)
伊谢尔伦

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維數組的數組名就是1維數組的起始位址。

  2. 多維數組中取到的元素,除了最低維度,都可以認為是」數組名“,也就是數組的起始位址。例如A4中取A[2],那A[2]就是A4中第2(從0算起)個1維數組的起始位址。

  3. 然後我們從4)開始看,array[i][j][k]就是一個值,沒什麼問題吧。

  4. 再來看3)array[i][j]表示的是在這個3維數組中,我選擇第i個2維數組,然後在這個2維數組中再選擇第j個1維數組,所以array[i][j]是這個1維數組的起始位址(可以理解為是1維數組的數組名),所以用int (*c)

  5. 跳過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可元素的位址,然後再取得到這個值。

Peter_Zhu

本質都是數組啊,就像一維空間是一條直線,二維空間就是許多條直線,也就是說二維是由一維拓展得到的,三維以此類推。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板