位置:首頁(yè) > 軟件操作教程 > 編程開發(fā) > C語言 > 問題詳情

C語言 字符數(shù)組的整體初始化

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-11-30

字符串設(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'};

很明顯,以字符串形式初始化更簡(jiǎn)潔一些。

此時(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ù)組長(zhǎng)度時(shí),至少為字符串所需長(zhǎng)度加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í)的長(zhǎng)度,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é)。


繼續(xù)查找其他問題的答案?

相關(guān)視頻回答
回復(fù)(0)
返回頂部