關於字符數組的初始化


字符數組可以在定義時進行初始化,有兩種初始化方法:

方法1:逐個字符賦給數組中各元素


char c[5]={ 'H','a','p','p','y' };
把5個字符分別賦給c[0]至c[4].以下是幾點說明
:

(1) 如果大括號內提供的初值個數(即字符個數)大於數組長度,則編譯時將出錯.如果初值個數小於數組長度,則只將這些字符賦給前面的數組元素,其餘的元素自動賦 空字符 (即'/0').例如:

引用:
char c[10]={ 'h','e','l','l','o' };

數組狀態如下所示:

引用:
c[0]=h , c[1]=e , c[2]=l , c[3]=l , c[4]=o
c[5]=/0, c[6]=/0, c[7]=/0, c[8]=/0, c[9]=/0

(2) 如果提供的初值個數與預定的數組長度相同,在定義時可以省略數組長度,系統會自動根據初值字符個數決定數組大小.如:

引用:
char c[]={ 'p','r','o','g','r','a','m' };
數組長度自動定義爲7.此方法可省略逐個去數字符的個數,對多字符賦值比較方便 .

(3) 也可以給多維數組初始化.如下初始化二維數組的例子:

引用:
char trinangle[3][5]={ { ' ',' ','o' },{ ' ','o','o','o' },{ 'o','o','o','o','o' } };
trinangle數組中存放的是一個三角形的圖形,如:

引用:
o
ooo
ooooo

下面來看一個例子:

引用:
main() /*輸出如上三角形*/
{
char trinangle[3][5]={ { ' ',' ','o' },{ ' ','o','o','o' },{ 'o','o','o','o','o' } };
int i,j;
for(i=0;i<=2;i++) /*外層列循環*/
{
for(j=0;j<=4;j++) /*內層行循環*/
printf("%c",trinangle[i][j]);
printf("/n"); /*每循環一次,換行一次*/
}
}

方法2:用字符串常量來給字符數組初始化 .例如:

引用:
char c[]={ "Good idea" };
這時,編譯計算出該數組的大小爲10.爲什麼不是9呢?因爲編譯程序在掃描整個字符串的時候,自動在該串末尾加上'/0'字符,以表示字符串到此結束,並把它一起存入字符數組中.這點請 務必注意 .因此,上面的初始化與下面的初始化等價:

引用:
char c[]={ 'G','o','o','d',' ','i','d','e','a','/0' };
而不與以下寫法等價:

引用:
char c[]={ 'G','o','o','d',' ','i','d','e','a' };
前者長度爲10,後者長度爲9.

引用:
小提示: '/0'代表ASCII碼爲0的字符,它是一個"空操作符",即使什麼也不做.C語言用它來作爲字符串結束標誌,作用是便於測定字符串的實際長度,例如有一個字符串,其中第10個字符爲'/0'則此字符串的有效字符爲9個.也就是說,在遇到字符'/0'時,表示字符串結束,由它前面的字符組成字符串實際長度.
系統在字符串常量末尾自動加一個'/0'作爲結束符.例如"I am a student"共要14個字符,但在內存中佔15個字節,最後一個字節'/0'是由系統自動加上的.字符串作爲一維數組存放在內存中.需要指出的是:字符數組並不要求它的最後一個字符爲'/0',甚至可以不包含'/0'.例如以下兩種寫法都是合法的:

引用:
char c[4]={ 'L','O','V','E' };

char c[4]={ "LOVE" };

但是爲了使處理方法一致,便於測定字符串的實際長度,以及在程序中作相應的處理,在字符數組也常常人爲地加上一個'/0'.如:

引用:
char c[5]={ 'L','O','V','E','/0' };
C語言允許在初始化一個一維字符數組時,省略 字符串常量 外面的大括號. 例如:

引用:
char c[]={ "I love China" };
可直接寫成:

引用:
char c[]="I love China";
這種方法清晰直觀,符合人們的習慣.但 注意,在省略大括號的時候, 不能用單個字符作(用單引號括起來的)爲初值,而是用一個字符串(用雙引號括起來的)作爲初值.也就是說,用方法一初始化時,不能省略大括號;只有在用方法二初始化時纔可以省略大括號。 如下寫法是錯誤的:

引用:
char c[]='I';
多維數組初始化時,推薦使用以下形式直接賦給它多個字符串.例如:

引用:
char str[4][8]={ "father","mother","brother","sister" };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章