在 C 語言中,我們會經(jīng)常使用到單引號和雙引號。那么單引號用來表示字符字面量,雙引號是用來表示字符串字面量。
成都創(chuàng)新互聯(lián)公司致力于網(wǎng)站設(shè)計(jì)、成都網(wǎng)站設(shè)計(jì),成都網(wǎng)站設(shè)計(jì),集團(tuán)網(wǎng)站建設(shè)等服務(wù)標(biāo)準(zhǔn)化,推過標(biāo)準(zhǔn)化降低中小企業(yè)的建站的成本,并持續(xù)提升建站的定制化服務(wù)水平進(jìn)行質(zhì)量交付,讓企業(yè)網(wǎng)站從市場競爭中脫穎而出。 選擇成都創(chuàng)新互聯(lián)公司,就選擇了安全、穩(wěn)定、美觀的網(wǎng)站建設(shè)服務(wù)!
'a' 表示字符字面量,在內(nèi)存中占1個字節(jié); 'a' + 1表示 'a' 的 ASCII 碼加1,結(jié)果為 'b'。
"a" 表示字符串字面量,在內(nèi)存中占2個字節(jié);"a" + 1表示指針運(yùn)算,結(jié)果指向"a"結(jié)束符'\0'。
字符字面量在 C 語言中國被編譯為對應(yīng)的 ASCII 碼,字符串字面量被編譯為對應(yīng)的內(nèi)存地址。printf 的第一個參數(shù)被當(dāng)成字符串內(nèi)存地址,內(nèi)存的低地址空間不能在程序中隨意訪問。下圖表示三種寫法的地址
我們接下來看個示例代碼,代碼如下:
#includeint main() { char c = " "; while( (c == "\t") || (c == " ") || (c == "\n") ) { scanf("%c", &c); } return 0; }
我們這段代碼是想實(shí)現(xiàn)當(dāng)用戶輸入 tab 鍵、空格或者回車時(shí),程序繼續(xù)循環(huán)執(zhí)行。當(dāng)用戶隨便輸入字母或者數(shù)字什么的,程序就執(zhí)行完畢。我們來編譯下看看結(jié)果是否如此
并沒有實(shí)現(xiàn)這個功能,顯然編譯出了3個警告,而且我們運(yùn)行后程序仿佛沒執(zhí)行while循環(huán)。我們再來仔細(xì)分析下這個程序,我們上面 char c = " "; 相當(dāng)于 char c = "string"; 程序編譯后字符串"string"的內(nèi)存地址被賦值給變量 c;內(nèi)存地址占 4 個字節(jié),而變量 c 只占1個字節(jié);由于類型不同,賦值后產(chǎn)生截?cái)?。那么我們?nèi)绾谓鉀Q這個問題呢?只需將所有的雙引號換成單引號即可,我們再次編譯,得到結(jié)果如下:
我們看到程序沒有編譯錯誤,運(yùn)行后效果也是我們所期望的。今天我們學(xué)習(xí)了單引號和雙引號的相關(guān)知識,總結(jié)如下:1、單引號括起來的單個字符代表整數(shù),雙引號括起來的字符代表字符指針;2、C 編譯器接受字符和字符串的比較但無任何意義,允許字符串對字符變量賦值,只能得到錯誤。后面我們會繼續(xù)對 C 語言的學(xué)習(xí)。
歡迎大家一起來學(xué)習(xí) C 語言,可以加我QQ:243343083。