搜尋

首頁  >  問答  >  主體

c++ - C语言多维数组问题,本人小白刚学c

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

PHP中文网PHP中文网2805 天前655

全部回覆(2)我來回復

  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:30:07

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

    回覆
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:30:07

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

    回覆
    0
  • 取消回覆