千家信息网

C语言单引号与双引号如何使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,今天小编给大家分享一下C语言单引号与双引号如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来
千家信息网最后更新 2026年11月03日C语言单引号与双引号如何使用

今天小编给大家分享一下C语言单引号与双引号如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、单引号和双引号

  • C语言中的单引号用来表示字符字面量

  • C语言中的双引号用来表示字符串字面量

'a'表示字符字面量,在内存中占1个字节,'a'+1表示'a'的ASCII码加1,结果为'b'

"a"表示字符串字面量,在内存中占2个字节,"a"+1表示指针运算,结果指向"a"结束符'\0'

下面看一段单引号和双引号本质的代码:

#include  int main(){    char* p1 =  1 ;    char* p2 = '1';    char* p3 = "1";    printf("%s, %s, %s", p1, p2, p3);    printf('\n');    printf("\n");    return 0;}

编译后会有警告,继续运行会发生段错误,如下:

究竟问题出现在哪里呢?下面先把打印语句注释掉并运行:

#include  int main(){    char* p1 =  1 ;    char* p2 = '1';    char* p3 = "1";    //printf("%s, %s, %s", p1, p2, p3);    //printf('\n');    //printf("\n");    return 0;}

编译运行虽然有警告,但是没有段错误,那么段错误肯定是打印语句那里了

把打印语句去掉注释

#include  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 的第一个参数被当成字符串内存地址

  • 内存的低地址空间不能在程序中随意访问

三、程序实例分析1

注意:字符 '1' 所对应的 ASCII 码就是十六进制的 0x00000031

0x08048000这个内存地址是非常特别的内存地址,所有低于这个地址的内存空间是不能随便访问的,一旦访问,就会发生段错误。程序里面的字符串编译之后得到的地址都是大于0x08048000,所以在程序中可以访问。

所以说 1 和 '1' 的内存地址都不能访问,访问了就会出现段错误。如果把printf("%s, %s, %s", p1, p2, p3); 注释打印下面的语句会发生什么?

#include int main(){    char* p1 =  1 ;    char* p2 = '1';    char* p3 = "1";    //printf("%s, %s, %s", p1, p2, p3);    printf('\n');    printf("\n");    return 0;}

输出结果如下,还是会发生段错误:

四、程序实例分析2

'\n' 字符字面量还是处于地址值区间,所以访问这个地址就会发生段错误。

如果把 printf('\n'); 注释掉

#include  int main(){    char* p1 =  1 ;    char* p2 = '1';    char* p3 = "1";    //printf("%s, %s, %s", p1, p2, p3);    //printf('\n');    printf("\n");    return 0;}

编译就不会出错,而且换了一行:

五、容易混淆的代码

这段代码的本意是如果字符 c 是 "\t" 或者 " " 或者 "\n",,则输入字符。

#include  int main(){    char c = " ";    while( (c == "\t") || (c == " ") || (c == "\n") )    {        scanf("%c", &c);    }    return 0;}

编译运行后,发现程序并没有让我们输入:

在进行解释之前,先看下面这样会发生什么:

分析:

1)编译后字符串"string"的内存地址被赋值给变量 c

2)内存地址占用 4个字节,而变量 c 只占用1个字节

3)由于类型不同,赋值后产生截断

所以说 char c = " "; 赋值后产生截断,那么 while 里面的语句也就不会执行了,这段程序是混淆了字符和字符串的概念。

可以这么改:

#include  int main(){    char c = ' ';    while( (c == '\t') || (c == ' ') || (c == '\n') )    {        scanf("%c", &c);    }    return 0;}

这样就能正确了:

以上就是"C语言单引号与双引号如何使用"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。

字符 地址 内存 引号 错误 字符串 字面 程序 编译 语句 语言 字节 注释 知识 篇文章 运行 代码 结果 分析 不同 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 河南真二互联网科技有限公司 重庆互联网络科技 互联网科技开发公司 合肥互联网科技公司 远拓互联网科技 银优互联网科技有限公司 美国互联网黑科技 科技互联网公司logo 互联网金融科技委员会 顺网科技2021年互联网排名 哈尔滨新华互联网科技学院 科技互联网的估值 昭通云南众福互联网科技有限公司 银川新华互联网科技职业技术培训学校图片 乌鲁木齐新华智原互联网科技学校 工业互联网山东科技大学 卡尔迅互联网科技有限公司 陕西云淼互联网科技公司 恒生科技互联网指数十大成分股 科技发展第三阶段互联网时代 科技互联网龙头 西安互联网科技 远信互联网科技 四川狮子座互联网科技 互联网对科技的发展 南平创想时代互联网科技有限公司 杭州壁岐互联网科技有限公司 成都互联网科技公司工作好不好 烟台灵鸽互联网科技有限公司 北京瑞云互联网科技有限公司
0