C語(yǔ)言-基礎(chǔ)教程-數(shù)組的初始化

字號(hào):

5.4.1 數(shù)組初始化
    C語(yǔ)言允許在說(shuō)明時(shí)對(duì)全局?jǐn)?shù)組和靜態(tài)局部數(shù)組初始化,但不能對(duì)非靜態(tài)局部數(shù)組初始化。
    與其它變量相似,數(shù)組初始化的一般形式如下:
    type-specifier array_name[size1]...[sizen]={value-list};
    數(shù)值表是一個(gè)由逗號(hào)分隔的常量表。這些常量的類型與類型說(shuō)明相容,第一個(gè)常量存入數(shù)組的第一個(gè)單元,第二個(gè)常量存入第二個(gè)單元,等等,注意在括號(hào)“ }”后要加上分號(hào)。
    下列中一個(gè)1 0元素整型數(shù)組被初始化裝入數(shù)字1到1 0:
    int i[10]={1,2,3,4,5,6,7,8,9,1 0 } ;
    這意味著i [ 0 ]的值為1,而i [ 9 ]的值為1 0。
    存放字符串的字符數(shù)組的初始化可采用如下簡(jiǎn)化的形式:
    char array_name[size] = "sing";
    例如,以下代碼段將s 初始化為” h e l l o”。
    char s[6] = "hello";
    上面代碼產(chǎn)生和下面代碼相同的結(jié)果:
    char s[6]={'h',' e ' ,' l ' ,' l ' ,' o ' ,' \ o ' } ;
    因?yàn)镃語(yǔ)言中的字符串都以空( N U L L)字符為終結(jié),故要確認(rèn)定義的數(shù)組足夠長(zhǎng)以存放空字符。這就是為什么h e l l o只有5個(gè)字符,而s 要有6個(gè)字符長(zhǎng)的原因。使用字符串常量時(shí),編譯程序自動(dòng)地在末尾加上空字符。
    多維數(shù)組初始化的方法與一維數(shù)組相同,例如,下式將s q r s初始化為從1到1 0及它們各自的平方數(shù)。
    int sqrs[10][2]={
    1,1,
    2,4,
    3,9,
    4,1 6 ,
    5,2 5 ,
    6,3 6,
    7,4 9 ,
    8,6 4 ,
    9,8 1,
    1 0,1 0 0 ,
    } ;
    5.4.2 變長(zhǎng)數(shù)組的初始化
    設(shè)想用數(shù)組初始化的方法建立一個(gè)如下錯(cuò)誤信息表:
    char e1[12] = "read error\n";
    char e2[13] = "write error\n";
    char e3[18] = "cannot open file\n";
    可以想象,如果用手工去計(jì)算每一條信息的字符數(shù)以確定數(shù)組的長(zhǎng)度是何等的麻煩。利用變長(zhǎng)數(shù)組初始化的方法可以使C自動(dòng)地計(jì)算數(shù)組的長(zhǎng)度。變長(zhǎng)數(shù)組初始化就是使C編譯程序自動(dòng)建立一個(gè)不指明長(zhǎng)度的足夠大的數(shù)組以存放初始化數(shù)據(jù)。使用這種方法,以上信息表變?yōu)椋?BR>    char e1[] = "read error\n";
    char e2[] = "write error\n";
    char e3[] = "cannot open file\n";
    給定上面的初始化,下面的語(yǔ)句printf("%s has length %d\,n"e2 ,si z e o f ( e 2 ) ) ;
    將打印出:
    write error
    has length 13
    除了減少麻煩外,應(yīng)用變長(zhǎng)數(shù)組初始化使程序員可以修改任何信息,而不必?fù)?dān)心隨時(shí)可能發(fā)生的計(jì)算錯(cuò)誤。
    變長(zhǎng)數(shù)組初始化的方法不僅僅限于一維數(shù)組。但在對(duì)多維數(shù)組初始化時(shí),必須指明除了第一維以外其它各維的長(zhǎng)度,以使編譯程序能夠正確地檢索數(shù)組。其方法與數(shù)組形式參數(shù)的說(shuō)明類似。這樣就可以建立變長(zhǎng)表,而編譯程序自動(dòng)地為它們分配存儲(chǔ)空間。例如,下面用變長(zhǎng)數(shù)組初始化的方法定義數(shù)組s q r s :
    int sqrs[ ][2]={
    1,1,
    2,4,
    3,9,
    4,1 6,
    5,2 5,
    6,3 6,
    7,4 9,
    8,6 4,
    9,8 1,
    1 0,1 0 0
    } ;
    相對(duì)定長(zhǎng)數(shù)組的初始化而言,這種說(shuō)明的優(yōu)點(diǎn)在于可以在不改變數(shù)組各維長(zhǎng)度的情況下,隨時(shí)增加或縮短表的長(zhǎng)度。