C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C语言 单引号与双引号

C语言中单引号与双引号的使用小结

作者:她说彩礼65万

在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';  // ✅ 合法隐式转换,但可能有警告

⚠️ 经典陷阱与对比

陷阱1:用单引号表示字符串

// ❌ 严重错误!'H' 是整数72,不是指针
char *s = 'H';  

// ✅ 正确
char *s = "H";  

陷阱2:sizeof 的结果不同

sizeof("A")   // = 2  (char[2]: 'A' + '\0')
sizeof('A')   // = 4  (int 的大小,不是1!)
sizeof((char)'A') // = 1  (强制转换后才是1)

陷阱3:条件判断中的混淆

// ❌ 永远不会为真!"0"是非空指针,永远true
if ("0") { ... }   

// ✅ 判断字符是否为数字零
if ('0') { ... }   // '0'=48, 非零,也为true(但语义不同)

// ✅ 真正想做的可能是:
if (ch == '0') { ... }

陷阱4:switch 语句

switch (ch) {
    case 'A':   // ✅ 合法:整型常量表达式
        break;
    case "A":   // ❌ 编译错误:case标签必须是整数,不能是指针
        break;
}

📌 记忆口诀

双引号是串,带零存只读,本质是地址;
单引号是数,类型为int,本质是整值。

简单验证方法:如果你需要的是文本内容(打印、比较字符串、初始化数组),用 "";如果你需要的是单个字符的编码值(算术运算、switch分支、字符比较),用 ''。

到此这篇关于C语言中单引号与双引号的使用小结的文章就介绍到这了,更多相关C语言 单引号与双引号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文