在C語言里單引號(hào)和雙引號(hào)的區(qū)別
—— C語言中的單引號(hào)用來表示字符字面量,編譯為對(duì)應(yīng)的ASCII碼
—— C語言中的雙引號(hào)用來表示字符串字面量,編譯為對(duì)應(yīng)的內(nèi)存地址
‘a(chǎn)'表示字符字面量,在內(nèi)存中占一個(gè)字節(jié),‘a(chǎn)'+1表示‘a(chǎn)'的ASCII碼加1,結(jié)果為‘b'。
“a”表示字符串字面量,在內(nèi)存中占兩個(gè)字節(jié),“a”+1表示指針運(yùn)算,結(jié)果指向“a”結(jié)束符‘\0'
分析:下面這段程序合法嗎?
char* p1 = 1; // p1指向地址0x00000001 char* p2 = '1'; // p2指向地址0x00000031 char* p3 = "1"; // p3指向地址0x080484d0
這三條語句是合法的,會(huì)出現(xiàn)警告,但是本質(zhì)上并沒有影響程序的運(yùn)行
如果程序改成這樣:
#include <stdio.h> int main() { char* p1 = 1; char* p2 = '1'; char* p3 = "1"; printf("%s,%s,%s\n", p1, p2, p3); //出現(xiàn)段錯(cuò)誤 printf('\n'); //出現(xiàn)段錯(cuò)誤 printf("\n"); return 0; }
小貼士:
1、字符字面量被編譯為對(duì)應(yīng)的ASCII碼
2、字符串字面量被編譯為對(duì)應(yīng)的內(nèi)存地址
3、內(nèi)存的低地址空間不能在程序中隨意訪問
右上圖可知,所有低于0x08048000的地址空間都不能訪問,所以p1和p2都不能訪問內(nèi)存地址,會(huì)出現(xiàn)段錯(cuò)誤·。
程序?qū)嵗治觯?/p>
char c = “string”;
其實(shí)這個(gè)明顯是錯(cuò)誤的,因?yàn)樽址畷?huì)編譯為對(duì)應(yīng)的內(nèi)存地址,內(nèi)存地址占4個(gè)字節(jié),但是c只占一個(gè)字節(jié),會(huì)產(chǎn)生截?cái)?,所以一般?duì)于字符串,我們用指針來指向
char* p= “string”;
到此這篇關(guān)于在C語言里單引號(hào)和雙引號(hào)的區(qū)別的文章就介紹到這了,更多相關(guān)C語言里單引號(hào)和雙引號(hào)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言/C++中如何產(chǎn)生隨機(jī)數(shù)
這里要用到的是rand()函數(shù), srand()函數(shù),和time()函數(shù)。需要說明的是,iostream頭文件中就有srand函數(shù)的定義,不需要再額外引入stdlib.h;而使用time()函數(shù)需要引入ctime頭文件2013-10-10c++通過引用實(shí)現(xiàn)三個(gè)數(shù)字求最大值
下面我們將通過這個(gè)例子來說明引用的作為函數(shù)參數(shù)的使用方法。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-10-10解讀堆排序算法及用C++實(shí)現(xiàn)基于最大堆的堆排序示例
把待排序的數(shù)組構(gòu)造出最大堆是進(jìn)行堆排序操作的基本方法,這里將帶大家來解讀堆排序算法及用C++實(shí)現(xiàn)基于最大堆的堆排序示例,首先從堆排序的概念開始:2016-06-06詳解C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中責(zé)任鏈模式的應(yīng)用,責(zé)任鏈模式使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接收者之間的耦合關(guān)系,需要的朋友可以參考下2016-03-03