搜尋

首頁  >  問答  >  主體

请问C++中二维数组的问题

C++中 二维数组如何初始化为空的?
这样可以吗?
int temp[][3]={};
求教 谢谢!

PHPzPHPz2807 天前557

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-04-17 11:50:31

    C++沒有「空數組」這一說,事實上你也不需要真正為空的數組。數組就是用來讀寫的,空著有什麼用?如果你不想看到數組中的某些元素,不讀它就行了。宣告一個數組,系統就在堆疊上為你分配一塊對應大小的空間。如果數組初始化了,比如說這樣

        int temp[][3] = {0};
    

    那麼這塊空間都被寫入0了。但是,這種聲明方式缺少了第一維,所以給人造成困惑:這塊空間到底是多大呢?一般來說,應該是3*sizeof(int),也就是說,這個陣列裡面被填滿了3個0。如果這樣初始化:

        int temp[][3] = {0, 1, 2};
    

    陣列的大小還是3*sizeof(int)。但是,如果這樣初始化呢:

        int temp[][3] = {0, 1, 2, 3};
    

    這塊陣列的大小就是6*sizeof(int)。原因是:原本宣告了3列,但初始化的時候有4個int,於是系統自動又為陣列添了一行。同理,如果這樣初始化:

        int temp[][3] = {0, 1, 2, 3, 4, 5};
    

    那麼陣列大小還是6*sizeof(int),而這樣初始化:

        int temp[][3] = {0, 1, 2, 3, 4, 5, 6};
    

    這時,陣列大小就是9*sizeof(int)了。
    但是,如果你不對數組進行初始化,比如說這樣:

        int temp[][3];
    

    一般是編譯不過的。原因很簡單,如果同時給了第一維m和第二維n,那麼數組空間就按照m*n個int來分配;如果只給第二維n,那麼系統需要綜合考慮n和你實際初始化的資料為數組分配空間;如果你連初始化也沒做,系統直接傻眼,不知道該分配多少空間了,所以編譯報錯。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 11:50:31

    雷雷

    回覆
    0
  • 取消回覆