在C語言里單引號和雙引號的區(qū)別
—— C語言中的單引號用來表示字符字面量,編譯為對應(yīng)的ASCII碼
—— C語言中的雙引號用來表示字符串字面量,編譯為對應(yīng)的內(nèi)存地址
‘a(chǎn)'表示字符字面量,在內(nèi)存中占一個字節(jié),‘a(chǎn)'+1表示‘a(chǎn)'的ASCII碼加1,結(jié)果為‘b'。
“a”表示字符串字面量,在內(nèi)存中占兩個字節(jié),“a”+1表示指針運算,結(jié)果指向“a”結(jié)束符‘\0'
分析:下面這段程序合法嗎?
char* p1 = 1; // p1指向地址0x00000001 char* p2 = '1'; // p2指向地址0x00000031 char* p3 = "1"; // p3指向地址0x080484d0
這三條語句是合法的,會出現(xiàn)警告,但是本質(zhì)上并沒有影響程序的運行
如果程序改成這樣:
#include <stdio.h>
int main()
{
char* p1 = 1;
char* p2 = '1';
char* p3 = "1";
printf("%s,%s,%s\n", p1, p2, p3); //出現(xiàn)段錯誤
printf('\n'); //出現(xiàn)段錯誤
printf("\n");
return 0;
}
小貼士:
1、字符字面量被編譯為對應(yīng)的ASCII碼
2、字符串字面量被編譯為對應(yīng)的內(nèi)存地址
3、內(nèi)存的低地址空間不能在程序中隨意訪問

右上圖可知,所有低于0x08048000的地址空間都不能訪問,所以p1和p2都不能訪問內(nèi)存地址,會出現(xiàn)段錯誤·。

程序?qū)嵗治觯?/p>
char c = “string”;
其實這個明顯是錯誤的,因為字符串會編譯為對應(yīng)的內(nèi)存地址,內(nèi)存地址占4個字節(jié),但是c只占一個字節(jié),會產(chǎn)生截斷,所以一般對于字符串,我們用指針來指向
char* p= “string”;
到此這篇關(guān)于在C語言里單引號和雙引號的區(qū)別的文章就介紹到這了,更多相關(guān)C語言里單引號和雙引號內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言循環(huán)隊列與用隊列實現(xiàn)棧問題解析
循環(huán)隊列又叫環(huán)形隊列,是一種特殊的隊列。循環(huán)隊列解決了隊列出隊時需要將所有數(shù)據(jù)前移一位的問題,本篇帶你一起看看循環(huán)隊列的問題和怎樣用隊列實現(xiàn)棧2022-04-04

