14 單引號和雙引號

2021-10-01 22:03:41 字數 2435 閱讀 4325

注:部落格中內容主要來自《狄泰軟體學院》,部落格僅當私人筆記使用。

測試環境:ubuntu 10.10

gcc版本:4.4.5

一、單引號和雙引號

1)c語言中的單引號用來表示字元字面量

2)c語言中的雙引號用來表示字串字面量

『a'表示字元字面量

在記憶體中佔1個位元組

』a'+1表示'a'的ascii碼加1,結果為'b'

"a"表示字串字面量

在記憶體中佔2個位元組

「a"+1表示指標運算,結果指向」a"結束符'\0'

3)下面的程式片段合法嗎?

char* p1 = 1;       //error

char* p2 = '1';     //error

char* p3 = "1";

例項分析

單引號和雙引號的本質

14-1.c

#include int main()

操作:

1) gcc 14-1.c -o 14-1.out編譯有警告:

14-1.c: in function 『main』:

14-1.c:5:13: warning: initialization makes pointer from integer without a cast [enabled by default]

char* p1 = 1;

^警告:用整型數初始化指標

14-1.c:6:13: warning: initialization makes pointer from integer without a cast [enabled by default]

char* p2 = '1';

^14-1.c:11:2: warning: passing argument 1 of 『printf』 makes pointer from integer without a cast [enabled by default]

printf('\n');

^in file included from 14-1.c:1:0:

/usr/include/stdio.h:362:12: note: expected 『const char * __restrict__』 but argument is of type 『int』

extern int printf (const char *__restrict __format, ...);

^14-1.c:11:2: warning: format not a string literal and no format arguments [-wformat-security]

printf('\n');

^

執行出現段錯誤。

segmentation fault (core dumped)
二、小貼士

1)字元字面量被編譯為對應的ascii碼

2)字串字面量被編譯為對應的記憶體位址

3)printf的第乙個引數被當成字串記憶體位址

4)記憶體的低位址空間不能在程式中隨意訪問

程式例項分析1

p1指向0x00000001

p2指向0x00000031

p3指向0x080484d0

程式例項分析2

'\n'指向0x00000010,訪問時會產生段錯誤。

"\n"是合法顯示。

例項分析

混淆概念的**

14-2.c

#include int main()

return 0;

}編譯有警告,執行沒有任何顯示,直接結束(判斷都是錯誤!)

這裡用了雙引號,變成位址占用4位元組,但是char只占用1個位元組,

後邊的比較肯定會發生錯誤(1位元組,最大255,肯定小於4位元組)

修改:""都改為''

二、程式例項分析

char c = "string";

發生了什麼?

分析:1)編譯後字串」string「的記憶體位址被賦值給變數c

2)記憶體位址占用4個位元組,而變數c只占用1個位元組

3)由於型別不同,賦值後產生截斷

小結:1)單引號括起來的單個字元代表整數

2)雙引號括起來的字元代表字元指標

3)c編譯器接受字元和字串的比較,無任何意義

4)c編譯器允許字串對字元變數賦值,只能得到錯誤

單引號和雙引號

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...

單引號( )和雙引號( )

關鍵是要養成良好的習慣.單引號 一般用在單字元,如 c 雙引號 一般用在字串,如 abc 如果巢狀使用的話,一般用交替方法,尤其是html中.如,也可以改成.在分割乙個字串時要用到str.split或者regex.split。簡單的單個字串的替換,直接用字串.split 單個字串 多個字串的替換用r...

mysql單引號 mysql單引號和雙引號

表名,列名最好用 esc下面那個,不用 會出錯 這就要從雙引號和單引號的作用講起 雙引號裡面的字段會經過編譯器解釋然後再當作html 輸出,但是單引號裡面的不需要解釋,直接輸出。例如 abc i love u echo abc 結果是 i love u echo abc 結果是 abc echo a...