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

C 語言單引號 vs 雙引號:字元常數與字串常數的本質差異

     編輯:更多程式設計知識

核心差異

特性單引號 'c'雙引號 "c"
類型int (字元常數)const char* (字串常數)
值ASCII/編碼對應的整數值指向唯讀記憶體區塊的指標 (含結尾 \0)
大小sizeof('c') == sizeof(int) (通常 4 bytes)sizeof("c") == 2 (字元 + \0)
可修改性不可修改 (常值)指向不可修改區域,嘗試修改導致 UB

實例:IP 位址解析 Bug 還原

// 錯誤:雙引號比較
if (str[k] != ".") { ... } // 永遠為真!比較 char 與 char*

// 正確:單引號比較
if (str[k] != '.') { ... } // 比較 char 與 char (整數值 46)

記憶體圖解

'A'         -->  整數 65 (0x41)
"A"         -->  位址 0x1000
               0x1000: 'A' (0x41)
               0x1001: '\0' (0x00)

常見用法對照

  • switch(ch) { case 'a': ... }:字元判斷必用單引號。
  • printf("Hello"):字串字面值用雙引號。
  • char c = 'a'; vs char *s = "a";:前者儲存字元值,後者儲存指標。
  • strlen("abc") == 3,sizeof("abc") == 4。

標準規定 (C99/C11)

  • 字元常數:'c' 型別為 int,值為執行字元集對應編碼。
  • 字串常數:"..." 型別為 char[n] (n = 長度+1),靜態儲存期,修改行為未定義。
  • 多字元常數 'ab' 為實作定義 (int),可移植性差,避免使用。

總結

單引號 = 整數值 (字元編碼),**雙引號 = 指標 (指向以 \0 結尾的字元陣列)**。混用會導致邏輯錯誤 (如字元比較永遠真/假) 或型別不匹配警告。牢記此區別,可避免大量低級 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved