網(wǎng)絡(luò)營銷工作網(wǎng)站seo優(yōu)化價(jià)格
文章目錄
- 使用括號(hào)進(jìn)行初始化
- 初始化省略維度
使用括號(hào)進(jìn)行初始化
我們可以給數(shù)組賦值一個(gè)長長的列表:
int matrix[2][3] = { 100, 101, 102, 110, 111, 112 };
它等價(jià)于
matrix[0][0]=100;
matrix[0][1]=101;
matrix[0][2]=102;
matrix[1][0]=110;
matrix[1][1]=111;
matrix[1][2]=112;
但是強(qiáng)烈建議下面的形式進(jìn)行二維數(shù)組初始化:
int two_dim[3][5] = {{00, 01, 02, 03, 04},{10, 11, 12, 13, 14},{20, 21, 22, 23, 24}
};
三維數(shù)組初始化
int three_dim[2][3][5] = {{{000,001,002,003,004},{010,011,012,013,014},{020,021,022,023,024}}{(100,101,102,103,104},{110,111,112,113,1141,{120,121,122,123,124}}
};
更高維的數(shù)組也是一樣的。
既然加不加那些花括號(hào)對(duì)初始化過程不會(huì)產(chǎn)生影響,那么為什么要不厭其煩地加上它們呢?
- 首先是它有利于顯示數(shù)組的結(jié)構(gòu)。一個(gè)長長的單一數(shù)字列表使你很難看清哪個(gè)值位于數(shù)組中的哪個(gè)位置。因此,花括號(hào)起到了路標(biāo)的作用,使你更容易確信正確的值出現(xiàn)在正確的位置。
- 其次,對(duì)于不完整的初始化列表,花括號(hào)就相當(dāng)有用。如果沒有這些花括號(hào),你只能在初始化列表中省略最后幾個(gè)初始值。即使一個(gè)大型多維數(shù)組只有幾個(gè)元素需要初始化,你也必須提供一個(gè)非常長的初始化列表,因?yàn)橹虚g元素的初始值不能省略。但是,如果使用了這些花括號(hào),每個(gè)子初始列表都可以省略尾部的幾個(gè)初始值。同時(shí),每一維的初始列表各自都是一個(gè)初始化列表。
為了說明這個(gè)概念,我們對(duì)一個(gè)四維數(shù)組初始化列表,假定我們只需要對(duì)數(shù)組的兩個(gè)元素進(jìn)行初始化,元素[0][0][0][0]初始化為100,元素[1][0][0][0]初始化為200,其余的元素都缺省地初始化為0。下面是我們用于完成這個(gè)任務(wù)的方法:
int four_dim[2][2][3]{5]={{{{100}}},{{{200}}}
};
如果初始化列表內(nèi)部不使用花括號(hào),我們就需要下面這個(gè)長長的初始化列表:
int four_dim[2][2][3][5]=(100, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 200}:
這個(gè)列表不僅難于閱讀,而且一開始要準(zhǔn)確地把100和200這兩個(gè)值放到正確的位置都很困難。
初始化省略維度
在多維數(shù)組中,只有第1維才能根據(jù)初始化列表缺省地提供。剩余的幾個(gè)維必須顯式地寫出,這樣編譯器就能推斷出每個(gè)子數(shù)組維數(shù)的長度。
int two_dim[][5]={ { 00, 01, 02 }, { 10, 11 }, { 20, 21, 22, 23 }
};
編譯器只要數(shù)一下初始化列表中所包含的初始值個(gè)數(shù),就可以推斷出最左邊一維為3。
為什么其他維的大小無法通過對(duì)它的最長初始列表的初始值個(gè)數(shù)進(jìn)行計(jì)數(shù)自動(dòng)推斷出來呢?
原則上,編譯器能夠這樣做。但是,這需要每個(gè)列表中的子初始值列表至少有一個(gè)要以完整的形式出現(xiàn)(不得省略末尾的初始值),這樣才能保證編譯器正確地推斷出每一維的長度。但是,如果我們要求除第1維之外的其他維的大小都顯式提供,所有的初始值列表都無需完整。
參考
- 《C和指針》