C語言高階 單引號和雙引號14

2022-08-26 02:36:09 字數 791 閱讀 7779

單引號和雙引號

『a』表示字元字面量,在記憶體中占用乙個位元組,'a'+1表示'a'的ascii碼加1,結果為'b'

"a"表示字串字面量,在記憶體中占用2個位元組,"a"+1表示指標運算,結果指向"a"結束符'\0'

請思考下面這段**是否合法?

char *p1 = 1;

char *p2 = '1';

char *p3 = "1";

例項分析:

1 #include 2

3int

main()

4

這段**會出現段錯誤,為什麼呢?請先看一下下面的小貼士:

我們再來分析一下,上面的**,p1指標和p2指標其實指向的是字元字面量,存貯於低位址,所以第10行**會出現段錯誤;

第12行,由於'\n'也是乙個字元字面量,所以也是存貯於低位址,由於低位址不能隨意的訪問,所以也會出現段錯誤。

我們再來看乙個示例:

1 #include 2

3int

main()412

13return0;

14 }

char c = "string";

這段**發生了什麼?分析:

編譯後字串"string"的記憶體位址值被賦值給變數c

記憶體位址占用四個位元組,而變數c值占用乙個位元組

由於型別不同,賦值後產生截段

由於while中的等號右邊都是字串字面量,也就是位址,存貯於高位址,而乙個位元組的c最大的值也就是255,所以while迴圈條件不可能被滿足

小結:

14 單引號和雙引號

注 部落格中內容主要來自 狄泰軟體學院 部落格僅當私人筆記使用。測試環境 ubuntu 10.10 gcc版本 4.4.5 一 單引號和雙引號 1 c語言中的單引號用來表示字元字面量 2 c語言中的雙引號用來表示字串字面量 a 表示字元字面量 在記憶體中佔1個位元組 a 1表示 a 的ascii碼加...

C語言中單引號和雙引號

寫慣了python對單引號和雙引號都混了。c語言中的單引號和雙引號含義迥異,用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值,因此,採用ascii字符集的編譯器而言,a 的含義與0141或97嚴格一致。而用雙引號引起的字串,代表的卻是乙個指向無名陣列起始字元...

單引號和雙引號

char p1 1 char p2 1 1 的ascii碼值為49 0和49位址處為作業系統使用,故訪問這些位址如printf s,s,s p1,p2,p3 會產生段錯誤。printf n n的ascii碼值為10,同理,段錯誤。a 表示字元常量,在記憶體中佔1個位元組,a 1表示 a 的ascii...