C语言中单引号与双引号的区别?

青_疯 2017-12-25 03:10:19
在C中

void main()
{
char a = 'A';
printf("%d\n",a);
}
输出结果为65,是A在ASCII中的十进制表示。

void main()
{
//这里用了双引号
char a = "A";
printf("%d\n",a);
}
输出结果为41,我很奇怪,问什么不是65?
第二段代码在编译的时候产生了警告:warning: initialization makes integer from pointer without a cast [enabled by default]
...全文
1807 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Salted_Fish215 2017-12-25
  • 打赏
  • 举报
回复 1
双引号“”是字符串,以\0结尾。 单引号''是字符。 char本身只能保存一个字符,所以语句 char a = "A"; 你用的编译器虽然通过,但是也报了警告。警告的原因是数据类型需要强制转换,你用编译器跟进去看看,41可能就是字符串"A"的地址。
「已注销」 2017-12-25
  • 打赏
  • 举报
回复
char a = "A"; 把字符串 A 的首地址赋值给 a,这个过程将地址的值 (32为4字节,64位8字节) 截断为 1 字节。结果是不确定的,运行时才能知道。
自信男孩 2017-12-25
  • 打赏
  • 举报
回复
引用 3 楼 cfjtaishan 的回复:
单引号指字符,双引号指字符串。用字符去存储字符串肯定会给警告; 因为字符串至少是赋值给字符数组或者字符指针。
警告的原因是类型不匹配。
自信男孩 2017-12-25
  • 打赏
  • 举报
回复
单引号指字符,双引号指字符串。用字符去存储字符串肯定会给警告; 因为字符串至少是赋值给字符数组或者字符指针。
xian_wwq 2017-12-25
  • 打赏
  • 举报
回复
两者是不同的 'A’代表的是一个整数,而且这个整数对应的是编译器所采用的字符集中的字符序列对应的数值; "A"是个字符串, printf("%d\n",a),使用了%d, 就要进行转换, 这也是编译提示警告的原因
qq_41433695 2017-12-25
  • 打赏
  • 举报
回复
因为单引号表示一个字符他与ASCII码对应。双引号就代表字符串,系统会自动给字符串末尾加上'\0'

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧