C/C++知识点之C语言的单引号和双引号实例讲解
小标 2018-08-27 来源 : 阅读 2039 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C语言的单引号和双引号实例讲解,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C语言的单引号和双引号实例讲解,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

例如:

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

"a"表示字符串字面量,占两个字节,"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;
}

编译运行结果如下:程序奔溃。

\

下边我们来分析分析为什么程序会崩溃,首先来看几个知识点:

-字符字面量被编译为对应的ASCII码

-字符串字面量被编译为对应的内存地址

-printf的第一个参数被当成字符串内存地址

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

有了如上几个知识点,那么上边代码的三个指针变量,指向的内存就可表示为如下:

\

\

从上图的内存分布,我们知道,代码已经试图去访问低地址了,所以会产生程序奔溃。

最后留一段小代码供大家分析,请思考如下代码执行后发生什么:


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

提示:char c = "string"发生了什么?

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

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

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

总结:

1、单引号括起来的字符代表字符指针

2、双引号括起来的字符代表字符指针

3、C编译器接受字符和字符串的比较,无任何意义

4、C编译器允许字符串对字符变量赋值,只能得到错误    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程