 字符(fu)串常量(liang)和字符(fu)串變量(liang)
							時間(jian):2019-05-27      來源:華清遠見
							字符(fu)串常量(liang)和字符(fu)串變量(liang)
							時間(jian):2019-05-27      來源:華清遠見 
							字(zi)(zi)符常(chang)量(liang)(liang)是由(you)一對單(dan)(dan)撇號括(kuo)起來的單(dan)(dan)個字(zi)(zi)符,如 ‘a’、‘C’、‘?’,‘$’。在(zai)C語言(yan)中,除了字(zi)(zi)符常(chang)量(liang)(liang)還有字(zi)(zi)符串(chuan)常(chang)量(liang)(liang)以及字(zi)(zi)符串(chuan)變量(liang)(liang),先(xian)來講(jiang)一下字(zi)(zi)符串(chuan)常(chang)量(liang)(liang)的個人理(li)解:
(1)常(chang)量(liang)本質(zhi)在于(yu)不可更(geng)改,而字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)串常(chang)量(liang)是就是一(yi)對雙引(yin)號括起來的字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)序列常(chang)量(liang)。例如“hello word”C語言中規定,在每一(yi)個(ge)(ge)字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)串常(chang)量(liang)的結(jie)尾(wei),系統(tong)都會(hui)自動加(jia)一(yi)個(ge)(ge)字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)’\0’作為(wei)結(jie)束(shu)標志符(fu)(fu)(fu)。而‘\0’在ascii碼(ma)中為(wei)0字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu),不起任何控制作用,也不是一(yi)個(ge)(ge)顯示的字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)。不過(guo)在計算字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu)常(chang)量(liang)的內(nei)存(cun)大(da)小時,雙撇號內(nei)有n個(ge)(ge)字(zi)(zi)(zi)(zi)(zi)符(fu)(fu)(fu),那么(me)內(nei)存(cun)大(da)小為(wei)n+1個(ge)(ge)字(zi)(zi)(zi)(zi)(zi)節。
(2)字(zi)符(fu)(fu)串(chuan)(chuan)變量(liang),值得注意(yi)的(de)是(shi)字(zi)符(fu)(fu)串(chuan)(chuan)常量(liang)不(bu)能(neng)賦給一個字(zi)符(fu)(fu)變量(liang),字(zi)符(fu)(fu)串(chuan)(chuan)是(shi)一連(lian)串(chuan)(chuan)字(zi)符(fu)(fu),而字(zi)符(fu)(fu)變量(liang)僅可以存儲(chu)(chu)一個字(zi)符(fu)(fu),而且字(zi)符(fu)(fu)串(chuan)(chuan)并不(bu)屬于數(shu)據(ju)類型,故(gu)C語(yu)言中任何數(shu)據(ju)類型的(de)變量(liang)都不(bu)能(neng)直接存儲(chu)(chu)一個字(zi)符(fu)(fu)串(chuan)(chuan),那(nei)么字(zi)符(fu)(fu)串(chuan)(chuan)如何存儲(chu)(chu)?C語(yu)言中有兩種存儲(chu)(chu)字(zi)符(fu)(fu)串(chuan)(chuan)的(de)方式,一種是(shi)通(tong)(tong)過字(zi)符(fu)(fu)數(shu)組存儲(chu)(chu),一種是(shi)通(tong)(tong)過字(zi)符(fu)(fu)指針存儲(chu)(chu)。
C語(yu)言中(zhong)通常(chang)使用字(zi)符(fu)數(shu)組作為(wei)字(zi)符(fu)串(chuan)(chuan)變量來存放(fang)(fang)一(yi)個字(zi)符(fu)串(chuan)(chuan),數(shu)組中(zhong)每一(yi)個元(yuan)素存放(fang)(fang)一(yi)個字(zi)符(fu),例(li)如“char a[10]="love"”。上(shang)例(li)其中(zhong)a[10]作為(wei)存儲字(zi)符(fu)串(chuan)(chuan)常(chang)量“love”的字(zi)符(fu)數(shu)組,而(er)字(zi)符(fu)數(shu)組也被字(zi)符(fu)串(chuan)(chuan)“love”初始化(hua)其內存空間。而(er)字(zi)符(fu)數(shu)組名就(jiu)是其存儲的字(zi)符(fu)串(chuan)(chuan)常(chang)量首地址。
另(ling)外(wai),字(zi)符(fu)(fu)(fu)(fu)指針(zhen)存(cun)儲(chu)(chu)其(qi)實質是(shi)將字(zi)符(fu)(fu)(fu)(fu)串(chuan)首(shou)(shou)(shou)地(di)址(zhi)(zhi)(zhi)(zhi)賦給(gei)字(zi)符(fu)(fu)(fu)(fu)指針(zhen),并且(qie)內存(cun)位置也(ye)是(shi)以字(zi)符(fu)(fu)(fu)(fu)串(chuan)首(shou)(shou)(shou)地(di)址(zhi)(zhi)(zhi)(zhi)往后的一片內存(cun)空(kong)間。例如:char *buf=“hello”,其(qi)中buf為(wei)字(zi)符(fu)(fu)(fu)(fu)串(chuan)首(shou)(shou)(shou)地(di)址(zhi)(zhi)(zhi)(zhi),字(zi)符(fu)(fu)(fu)(fu)串(chuan)存(cun)儲(chu)(chu)為(wei)buf地(di)址(zhi)(zhi)(zhi)(zhi)開始的連續內存(cun)空(kong)間,可(ke)以使(shi)用(yong)buf++遍歷字(zi)符(fu)(fu)(fu)(fu)串(chuan)。值(zhi)得注意的一點是(shi)*buf為(wei)指向(xiang)字(zi)符(fu)(fu)(fu)(fu)串(chuan)首(shou)(shou)(shou)地(di)址(zhi)(zhi)(zhi)(zhi)內容,即(ji)字(zi)符(fu)(fu)(fu)(fu)h所(suo)在地(di)址(zhi)(zhi)(zhi)(zhi)。若想輸出打(da)印字(zi)符(fu)(fu)(fu)(fu)串(chuan),使(shi)用(yong)buf++遍歷是(shi)一種,也(ye)可(ke)以利用(yong)字(zi)符(fu)(fu)(fu)(fu)串(chuan)首(shou)(shou)(shou)地(di)址(zhi)(zhi)(zhi)(zhi)以字(zi)符(fu)(fu)(fu)(fu)串(chuan)格式(shi)輸出打(da)印,例如:printf(“%s”,buf);

