文章目录

  • 1 C、C++中的单引号和双引号
    • 1.1 C、C++中的单引号和双引号
    • 1.2 单引号和双引号的错误使用举例

1 C、C++中的单引号和双引号

1.1 C、C++中的单引号和双引号

C、C++中的单引号和双引号作用如下:

  • 单引号用来表示字符字面量,单引号括起来的带个字符代表整数。
  • 双引号用来表示字符串字面量,双引号括起来的若干个字符代表字符指针。

比如:

1.2 单引号和双引号的错误使用举例

举例一:单引号和双引号的本质
如下程序片段合法吗?

#include <stdio.h>int main()
{char* p1 =  1 ;char* p2 = '1';char* p3 = "1";printf("%s, %s, %s", p1, p2, p3);    // 段错误printf('\n');                       // 段错误printf("\n");return 0;
}

为了解释为何会出现段错误,我们需要知道如下知识:

  • 字符字面量被编译为对应的ASCII码。
  • 字符串字面量被编译为对应的内存地址。
  • printf的第一个参数被当成字符串内存地址。
  • 内存的低地址空间不能再程序中随意访问。

我们可以得到如下的内存图,段错误的原因也就显而易见了:


举例二:混淆概念的代码

#include <stdio.h>int main()
{char c = " ";while( (c == "\t") || (c == " ") || (c == "\n") ){scanf("%c", &c);}return 0;
}
// 运行结果:程序直接执行结束,不会接收用户的输入。

为了理解上述运行结果,我们需要运行结果,我们需要知道char c = "string"发生了什么?
分析:

  1. 编译后字符串“string”的内存地址被赋值给变量c。
  2. 内存地址占用4个字节,而变量c只占用1个字节。
  3. 由于类型不同,赋值后产生截断。

注意:

  • C编译器接受字符和字符串的比较,无任何意义。
  • C编译器允许字符串对字符变量赋值,只能得到错误。

参考资料:

  1. C语言进阶剖析教程

C、C++中的单引号和双引号相关推荐

  1. c语言双引号和单引号的区别_Python中的单引号和双引号有什么区别?

    在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式可以避免出错之外,还可以减少转义字符的使用,使程序看起来更清晰. 举两个例子: 1.包含单引号的字符 ...

  2. java中双引号和单引号_Java中的单引号和双引号之间有区别吗?

    问题 Java中的单引号和双引号之间有区别吗? #1 热门回答(126 赞) 对于literalchar使用单引号,对于literalString使用双引号,如下所示: char c = 'a'; S ...

  3. php双引号表示什么,PHP中的单引号和双引号字符串有什么区别?

    PHP中的单引号和双引号字符串有什么区别? 我不是PHP编程的专家,但我有点困惑为什么我在PHP中看到一些代码用单引号放入字符串,有时用双引号. 我只是在.NET或C语言中知道,如果它是单引号,这意味 ...

  4. js html 单引号,JS 和 HTML 中的单引号与双引号

    JS中的单引号与双引号 HTML中的单引号与双引号很简单,就是两个字符实体: 显示 描述 实体名称 实体编号 " 双引号.引号 " " ' 单引号.撇号 ' ' x 1 ...

  5. PostgreSQL 中的单引号与双引号

    PostgreSQL 中的单引号与双引号 在pg中的sql,单引号用来标识实际的值,双引号用来标识表名(table name)或列名(column name)等数据库中存在的值. 如,执行一句quer ...

  6. python代码什么时候用单引号_Python 中的单引号和双引号有什么区别?

    在Python当中可以使用单引号,也可以使用双引号,那两者有什么区别吗? 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了可以简化程序 ...

  7. html中单引号与双引号区别,JS 和 HTML 中的单引号与双引号

    JS中的单引号与双引号 HTML中的单引号与双引号很简单,就是两个字符实体: 显示 描述 实体名称 实体编号 " 双引号.引号 " " ' 单引号.撇号 ' ' x 1 ...

  8. Python中的单引号和双引号 的使用有什么区别

    在Python当中表达字符串既可以使用单引号,也可以使用双引号 简单来说,在Python中使用单引号或双引号是没有区别的,都可以用来表示一个字符串.但是这两种通用的表达方式,除了可以简化程序员的开发, ...

  9. shell中的单引号和双引号

    shell中的单引号和双引号 在shell中,如果需要定义或引用变量通常需要使用双引号,如果希望不解析变量,直接原样输出内容可以使用单引号. 因为双引号首先会先解析变量的内容,而单引号包裹的内容表示原 ...

  10. php中单引号,php中的单引号、双引号和转义字符详解

    PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name):最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出. 例如: 结果: 字符串$name 字符 ...

最新文章

  1. TensorFlow与PyTorch模型部署性能比较
  2. JavaScript事件循环探索
  3. c语言通讯录以及写入文件,学C三个月了,学了文件,用C语言写了个通讯录程序...
  4. 单片机蓝牙烧录_蓝牙模块与单片机如何连接?
  5. mysql存储过程_Mysql存储过程
  6. Inno Setup 检测已安装的.NET Framework 版本
  7. .bash_profile和.bashrc的什么差别
  8. Java实现栈和队列
  9. dos2unix整个目录
  10. Java单例模式简单代码
  11. 学用计算机 关机,电脑关机命令是什么?快速关机必备(你学会了吗)
  12. 均方根误差,平均绝对误差,均方误差,标准差计算方法
  13. springboot+爱心捐赠小程序 毕业设计-附源码211711
  14. java 12306 源码_java Web SpringMVC项目实现12306余票查询功能
  15. Radiology:影像组学:图像不仅仅是图片,它们还是数据
  16. 大公司github官网整理链接
  17. 《设计模式沉思录》分享
  18. 百度前端技术学院--零基础--第四天:背景边框列表链接和更复杂的选择器
  19. 深入理解 Java 反射:Class (反射的入口)
  20. 【信息学奥赛一本通】1404:我家的门牌号

热门文章

  1. java知识点ppt背景图片,Java 给PowerPoint文档设置背景颜色和背景图片
  2. 腾达ac5第三方固件_腾达AC9的刷固件指南
  3. linux里面rpm是什么文件,linux中deb格式和rpm格式分别是什么?
  4. 简述T568A和T568B的区别
  5. 【vulhub漏洞复现】ActiveMQ 反序列化漏洞 (CVE-2015-5254)-01
  6. 《宽带与接入网技术》第四章 以太网接入技术
  7. android socket 丢包,socket timeout exception和常见网络丢包情况
  8. Excel2013向被粘贴区域的非空单元格内粘贴数据
  9. 2021.12.10 vue vue-cil (12)
  10. horizon2206+A6000显卡 vGPU桌面经验分享