首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C 語言單引號與雙引號差異:字元常量 vs 字串常量

     編輯:C 語言問答

核心區別一覽

特性單引號 ' '雙引號 " "
代表意義字元常量 (單一字符)字串常量 (字符序列)
類型int (C 語言中字元常量類型為 int)char * (指向首字符的指標)
佔用內存通常 4 位元組 (int 大小)長度 + 1 (結尾隱含 \0)
合法內容僅 1 個字符 (或轉義序列如 '\n')0 或多個字符
範例'A', '1', '\n', '\\'"A", "Hello", "", "\n"
sizeof 結果sizeof('A') == sizeof(int) (通常 4)sizeof("A") == 2 (含 \0)

常見錯誤與修正

錯誤 1:字串比較用單引號


// 錯
if (str == 'hello') { ... }
// 對
if (strcmp(str, "hello") == 0) { ... } // 需用 strcmp 比較內容

錯誤 2:字元賦值用雙引號


// 錯
char c = "A"; // 警告:指標轉整數,實賦值位址
// 對
char c = 'A'; // 正確賦值 ASCII 65

錯誤 3:switch case 標籤用雙引號


// 錯
switch(c) { case "A": ... } // case 標籤必須是整數常量表達式
// 對
switch(c) { case 'A': ... }

錯誤 4:printf 格式字串混淆


// 輸出單字元
printf("%c\n", 'A'); // 正確
printf("%s\n", "A"); // 也能輸出 A,但語義不同 (字串)

// 輸出字串
printf("%s\n", "Hello"); // 正確
// printf("%c\n", "Hello"); // 錯誤:%c 期望 int,傳入指標 -> 未定義行為

記憶體佈局圖解

字元常量 'A' (int, 立即值/寄存器/常數區):
+------+
|  65  |  (ASCII 碼值)
+------+

字串常量 "A" (唯讀數據段):
+------+------+
| 'A'  | '\0' |  連續兩字節,首地址類型 char*
+------+------+

進階:多字符常量 (非標準/實現定義)


int x = 'AB'; // 實現定義行為,通常打包為 ( 'A' << 8 ) | 'B' = 0x4142
// 避免使用,可移植性極差

總結口訣

  • 單引號:一個字符,值語義 (int),用於字元操作、switch case、字元比較。
  • 雙引號:一串字符,址語義 (char*),用於字串輸出、strcpy/strcmp、字串字面值。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved