在 C 语言中,双引号(" "
)和单引号(' '
)有本质区别,分别用于表示不同类型的常量:
1. 双引号 " "
:表示字符串
- 用途:定义一个字符串常量(即字符数组)。
- 内存表示:字符串以
\0
(空字符)结尾。 - 类型:
char*
(指向字符数组的指针)。 - 示例:
char *str = "Hello"; // 字符串常量,存储在只读内存区域
"Hello"
实际存储为'H' 'e' 'l' 'l' 'o' '\0'
,占用 6 字节。
2. 单引号 ' '
:表示字符
- 用途:定义一个字符常量(单个字符)。
- 内存表示:直接存储字符的 ASCII 码值。
- 类型:
int
(C 语言中字符常量的类型实际是int
)。 - 示例:
char c = 'A'; // 字符常量,值为 65(ASCII 码)
关键区别总结
特性 | 双引号 " " | 单引号 ' ' |
---|---|---|
用途 | 定义字符串 | 定义单个字符 |
结尾符 | 自动添加 \0 | 无 |
内存占用 | 字符数 + 1(\0 ) | 1 字节(通常) |
类型 | char* (指针) | int (实际类型) |
可包含内容 | 多个字符 | 仅一个字符 |
常见错误
错误 1:用单引号包裹多个字符
char c = 'AB'; // 编译通过,但行为未定义(多字符常量)
- 结果:编译器会将多个字符转换为
int
,具体值依赖实现(无意义)。
错误 2:混淆字符和字符串
char *str = 'A'; // 错误!类型不匹配('A' 是 int,str 是 char*)
char c = "A"; // 错误!类型不匹配("A" 是 char*,c 是 char)
- 修正:
char *str = "A"; // 正确(字符串) char c = 'A'; // 正确(字符)
特殊场景:转义字符
- 双引号内的转义符有效:
char *str = "A\tB"; // 表示 "A" + 制表符 + "B"
- 单引号内的转义符也有效:
char c = '\n'; // 表示换行符(ASCII 码 10)
总结
- 双引号
" "
:用于操作字符串(如printf("%s", "Hello")
)。 - 单引号
' '
:用于操作单个字符(如printf("%c", 'A')
)。
确保严格区分二者,避免因类型混淆导致编译错误或逻辑错误。