單引號和雙引號
『a』表示字元字面量,在記憶體中占用乙個位元組,'a'+1表示'a'的ascii碼加1,結果為'b'
"a"表示字串字面量,在記憶體中占用2個位元組,"a"+1表示指標運算,結果指向"a"結束符'\0'
請思考下面這段**是否合法?
char *p1 = 1;
char *p2 = '1';
char *p3 = "1";
例項分析:
1 #include 23int
main()
4
這段**會出現段錯誤,為什麼呢?請先看一下下面的小貼士:
我們再來分析一下,上面的**,p1指標和p2指標其實指向的是字元字面量,存貯於低位址,所以第10行**會出現段錯誤;
第12行,由於'\n'也是乙個字元字面量,所以也是存貯於低位址,由於低位址不能隨意的訪問,所以也會出現段錯誤。
我們再來看乙個示例:
1 #include 23int
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...