在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++實現(xiàn)基于最大堆的堆排序示例
把待排序的數(shù)組構(gòu)造出最大堆是進行堆排序操作的基本方法,這里將帶大家來解讀堆排序算法及用C++實現(xiàn)基于最大堆的堆排序示例,首先從堆排序的概念開始:2016-06-06詳解C++設(shè)計模式編程中責(zé)任鏈模式的應(yīng)用
這篇文章主要介紹了C++設(shè)計模式編程中責(zé)任鏈模式的應(yīng)用,責(zé)任鏈模式使多個對象都有機會處理請求,從而避免請求的發(fā)送者和接收者之間的耦合關(guān)系,需要的朋友可以參考下2016-03-03