2 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
C++沒(méi)有“空數(shù)組”這一說(shuō),事實(shí)上你也不需要真正為空的數(shù)組。數(shù)組就是用來(lái)讀寫(xiě)的,空著有什么用?如果你不想看到數(shù)組中的某些元素,不讀它就行了。聲明一個(gè)數(shù)組,系統(tǒng)就在棧上為你分配一塊相應(yīng)大小的空間。如果數(shù)組初始化了,比如說(shuō)這樣
int temp[][3] = {0};
那么這塊空間里都被寫(xiě)入了0。但是,這種聲明方式缺少了第一維,所以給人造成困惑:這塊空間到底是多大呢?一般來(lái)說(shuō),應(yīng)該是3*sizeof(int),也就是說(shuō),這個(gè)數(shù)組里面被填充了3個(gè)0。如果這樣初始化:
int temp[][3] = {0, 1, 2};
數(shù)組的大小還是3*sizeof(int)。但是,如果這樣初始化呢:
int temp[][3] = {0, 1, 2, 3};
這塊數(shù)組的大小就是6*sizeof(int)。原因是:原本聲明了3列,但是初始化的時(shí)候有4個(gè)int,于是系統(tǒng)自動(dòng)又為數(shù)組添了一行。同理,如果這樣初始化:
int temp[][3] = {0, 1, 2, 3, 4, 5};
那么數(shù)組大小還是6*sizeof(int),而這樣初始化:
int temp[][3] = {0, 1, 2, 3, 4, 5, 6};
這時(shí),數(shù)組大小就是9*sizeof(int)了。
但是,如果你不對(duì)數(shù)組進(jìn)行初始化,比如說(shuō)這樣:
int temp[][3];
一般是編譯不過(guò)的。原因很簡(jiǎn)單,如果同時(shí)給出了第一維m和第二維n,那么數(shù)組空間就按照m*n個(gè)int來(lái)分配;如果只給出第二維n,那么系統(tǒng)需要綜合考慮n和你實(shí)際初始化的數(shù)據(jù)為數(shù)組分配空間;如果你連初始化也沒(méi)做,系統(tǒng)直接傻眼,不知道該分配多少空間了,所以編譯報(bào)錯(cuò)。
- 2 回答
- 0 關(guān)注
- 1009 瀏覽
添加回答
舉報(bào)