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

字號:

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