C語言 字符數(shù)組的整體初始化
字符串設(shè)置了結(jié)束標(biāo)志以后,對(duì)字符數(shù)組的初始化,就可以用字符串常量來初始化字符數(shù)組。
例如:
char strl[15] = {"Hello boy"};
或
char strl[20] ="Hello boy";
等價(jià)于:
char strl[20] ={'H','e','l','1','0',' ','b','o','y','\0'};
很明顯,以字符串形式初始化更簡潔一些。
此時(shí)數(shù)組stri在內(nèi)存中的存儲(chǔ)形式如圖所示。
H | e | i | i | 0 | b | o | y | \0 | \0 | \0 | \0 | \0 | \0 | \0 |
從上圖可看出,str1[9]中存儲(chǔ)的是字符'\0',因?yàn)檫@是一個(gè)字符串結(jié)束標(biāo)記,所以C語言所有的字符串處理函數(shù)完全忽略'\0'之后數(shù)組空間中存放的內(nèi)容。
從上圖可看出,字符串結(jié)束標(biāo)志也要在字符數(shù)組中占用一個(gè)元素的存儲(chǔ)空間,因此在聲明字符數(shù)組長度時(shí),至少為字符串所需長度加1。
字符串與字符數(shù)組的區(qū)別就在于是否存在字符串結(jié)束標(biāo)記'\0',例如:
char s1[]="hello";
char s2[5]={'h','e','l','l','o'};
S1和S2中存儲(chǔ)的都是相同的內(nèi)存。但對(duì)于S1,系統(tǒng)會(huì)自動(dòng)在末尾增加一個(gè)'\0',所以在內(nèi)存中所占的空間為6個(gè)字節(jié)。而S2所占空間就是它定義時(shí)的長度,5個(gè)字節(jié)。
字符數(shù)組使用字符串初始化時(shí)也可省略“元素個(gè)數(shù)”。例如:
char strl[]="Hello boy";
這樣會(huì)根據(jù)初始化字符串的個(gè)數(shù)確定str1在內(nèi)存中所占的空間,因?yàn)?#39;\0'也占1個(gè)字節(jié),所以str1在內(nèi)存中所占空間為10個(gè)字節(jié)。
點(diǎn)擊加載更多評(píng)論>>