迷茫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和你實際初始化的資料為數組分配空間;如果你連初始化也沒做,系統直接傻眼,不知道該分配多少空間了,所以編譯報錯。