c語言數組初始化問題


2147483648字符數組的初始化,最容易理解的方式就是逐個字符賦給數組中各元素。

charstr[10]={'I','','a','m','',‘h’,'a','p','p','y'};

即把10個字符分別賦給str[0]到str[9]10個元素
如果花括號中提供的字符個數大於數組長度,則按語法錯誤處理;若小於數組長度,則只將這些字符數組中前面那些元素,其余的元素自動定為空字符(即'\0')


char str[10] = {'\0'}; //結果里面元素全都為\0.其實這樣賦值只是把第
1個元素賦值為\0,后面的都默認用\0填充,如果是char str[10]={'1'};
只有第一個為‘1’,后面都是\0.
但千萬不要以為寫成char str[10];不賦值也可以。這樣寫里面的內容是亂的
這是細節,值得注意。
所以我們最好每次想寫char str[5]都寫成
char str[5]='\0';
這樣做最好

int a[10]={4,5};
第一個賦值為4,第二個為5,后面的為0.如果直接int a[10]; 內容很亂。

規律:用某個值給數組賦值,沒有被賦值的元素會自動調用默認的構造函數,如char默認為\0,int默認為0.
等等.

字符數組與字符串
在 c語言中,將字符串作為字符數組來處理。(c++中不是)
在實際應用中人們關心的是有效字符串的長度而不是字符數組的長度,例如,
定義一個字符數組長度為100,而實際有效字符只有40個,為了測定字符串的實
際長度,C語言規定了一個“字符串結束標志”,以字符'\0’代表。如果有一個字
符串,其中第10個字符為'\0',則此字符串的有效字符為9個。也就是說,在遇到
第一個字符'\0'時,表示字符串結束,由它前面的字符組成字符串。
系統對字符串常量也自動加一個'\0'作為結束符。例如"C Program”共有9個字
符,但在內存中占10個字節,最后一個字節'\0'是系統自動加上的。(通過 sizeof()
函數可驗證)
了結束標志'\0'后,字符數組的長度就顯得不那么重要了,在程序中往往依靠
檢測'\0'的位置來判定字符串是否結束,而不是根據數組的長度來決定字符串長
度。當然,在定義字符數組時應估計實際字符串長度,保證數組長度始終大於
字符串實際長度。(在實際字符串定義中,常常並不指定數組長度,如 char str[ ])
說明:'\n’代表 ASCII 碼為0的字符,從 ASCII碼表中可以查到 ASCII 碼為0的
字符不是一個可以顯示的字符,而是一個“空操作符”,即它什么也不干。用它
來作為字符串結束標志不會產生附加的操作或增加有效字符,只起一個供辨別
的標志。

對C 語言處理字符串的方法由以上的了解后,再對字符數組初始化的方法補充
一種方法——即可以用字符串常量來初始化字符數組:

注意sizeof與strlen的不同:

char a[40]={'0'};
printf("%d",sizeof(a));//開辟的數組的總大小40*1
printf("%d",strlen(a));

輸出 40,1.

char str[ ]={"I am happy"}; 可以省略花括號,如下所示
char str[ ]="I am happy";
注意:上述這種字符數組的整體賦值只能在字符數組初始化時使用,不能用於
字符數組的賦值,字符數組的賦值只能對其元素一一賦值,如:

char d[5];
d="hell"; 

錯誤。vs2010提示表達式d必須是可修改的左值。

這跟

int a[5]={1,2,3};

而不能

int a[5];

a={1,2,3}

數組只能在初始化的時候一次性賦值,其他時候必須要一個一個賦值。

看來數組名和指針是有區別的。

下面的賦值方法是
錯誤的

char str[ ];
str="I am happy";
不是用單個字符作為初值,而是用一個字符串(注意:字符串的兩端是用雙引
號“”而不是單引號‘’括起來的)作為初值。顯然,這種方法更直觀方便。(注意:
數組str的長度不是10,而是11,這點請務必記住,因為字符串常量"I am happy"
的最后由系統自動加上一個'\0')
因此,上面的初始化與下面的初始化等價

char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'}; 必須要人為加上一個\0,否則strlen不正確。
而不與下面的等價
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};//strlen錯誤,后面沒有\0
前者的長度是11,后者的長度是10.
說明:字符數組並不要求它的最后一個字符為'\0',甚至可以不包含'\0',向下面
這樣寫是完全合法的。
char str[5]={'C','h','i','n','a'};

可見,用兩種不同方法初始化字符數組后得到的數組長度是不同的。

、賦值方式:
對字符數組只能對各個元素賦值,不能用以下方法對字符數組賦值
char str[14];
str="I love China"; (但在字符數組初始化時可以,即 char
str[14]="I love China";)
而對字符指針變量,采用下面方法賦值:
char* a;
a="I love China";
或者是 char* a="I love China"; 都可以
4.3、對字符指針變量賦初值(初始化):
char* a="I love China";
等價於:
char* a

a="I love China";
而對於字符數組的初始化
char str[14]="I love China";
不能等價於:
char str[14];
str="I love China"; (這種不是初始化,而是賦值,而對數組這樣賦
值是不對的)

轉自:http://wenku.baidu.com/view/de788bf34693daef5ef73dd7.html。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM