91人参与 • 2026-10-10 • C/C++
在c语言中,""(双引号)和 ''(单引号)有着本质的区别,它们代表完全不同的数据类型和内存模型。混淆这两者是初学者最常见的错误之一。
| 特性 | "" (双引号) | '' (单引号) |
|---|---|---|
| 名称 | 字符串字面量 | 字符常量 |
| 数据类型 | char[] (字符数组) | int (注意:不是 char!) |
| 内容 | 字符序列 + 自动追加 \0 | 单个字符的 ascii/编码值 |
| 内存占用 | n+1 字节 (含终止符) | sizeof(int) 字节 (通常4字节) |
| 存储位置 | 只读数据段 (.rodata) | 立即数 (嵌入指令中) |
| 示例 | "a" → {‘a’, ‘\0’} | 'a' → 65 |
char *s = "hello";
int c = 'a'; // ✅ 正确:'a' 的类型就是 int char ch = 'a'; // ✅ 合法隐式转换,但可能有警告
// ❌ 严重错误!'h' 是整数72,不是指针 char *s = 'h'; // ✅ 正确 char *s = "h";
sizeof("a") // = 2 (char[2]: 'a' + '\0')
sizeof('a') // = 4 (int 的大小,不是1!)
sizeof((char)'a') // = 1 (强制转换后才是1)
// ❌ 永远不会为真!"0"是非空指针,永远true
if ("0") { ... }
// ✅ 判断字符是否为数字零
if ('0') { ... } // '0'=48, 非零,也为true(但语义不同)
// ✅ 真正想做的可能是:
if (ch == '0') { ... }
switch (ch) {
case 'a': // ✅ 合法:整型常量表达式
break;
case "a": // ❌ 编译错误:case标签必须是整数,不能是指针
break;
}
双引号是串,带零存只读,本质是地址;
单引号是数,类型为int,本质是整值。
简单验证方法:如果你需要的是文本内容(打印、比较字符串、初始化数组),用 "";如果你需要的是单个字符的编码值(算术运算、switch分支、字符比较),用 ''。
到此这篇关于c语言中单引号与双引号的使用小结的文章就介绍到这了,更多相关c语言 单引号与双引号内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论