C语言进阶—— 单引号和双引号14
单引号和双引号
- C语言中的单引号用来表示字符字面量
- C语言中的双引号用来表示字符串字面量
‘a’表示字符字面量,在内存中占用一个字节,'a'+1表示'a'的ASCII码加1,结果为'b'
"a"表示字符串字面量,在内存中占用2个字节,"a"+1表示指针运算,结果指向"a"结束符'\0'
请思考下面这段代码是否合法?
char *p1 = 1;
char *p2 = '1';
char *p3 = "1";
实例分析:
#include <stdio.h> int main()
{ char* p1 = ;
char* p2 = '';
char* p3 = ""; printf("%s, %s, %s", p1, p2, p3); printf('\n');
printf("\n"); return ;
}
这段代码会出现段错误,为什么呢?请先看一下下面的小贴士:
- 字符字面量被编译为对应的ASCII码
- 字符串字面量被编译为对应的内存地址
- printf 的第一个参数被当成字符串内存地址
- 内存的低地址空间不能随意在程序中随意访问
我们再来分析一下,上面的代码,p1指针和p2指针其实指向的是字符字面量,存贮于低地址,所以第10行代码会出现段错误;
第12行,由于'\n'也是一个字符字面量,所以也是存贮于低地址,由于低地址不能随意的访问,所以也会出现段错误。
我们再来看一个示例:
#include <stdio.h> int main()
{ char c = " "; while( (c == "\t") || (c == " ") || (c == "\n") )
{
scanf("%c", &c);
} return ;
}
char c = "string";
这段代码发生了什么?分析:
- 编译后字符串"string"的内存地址值被赋值给变量c
- 内存地址占用四个字节,而变量c值占用一个字节
- 由于类型不同,赋值后产生截段
由于while中的等号右边都是字符串字面量,也就是地址,存贮于高地址,而一个字节的c最大的值也就是255,所以while循环条件不可能被满足
小结:
- 单引号括起来的单个字符代表整数
- 双引号括起来的字符代表字符指针
- C编译器接受字符和字符串的比较,无任何意义
- C编译器允许字符串对字符变量进行赋值,只能得到错误
C语言进阶—— 单引号和双引号14的更多相关文章
- C语言中 单引号与双引号的区别
在C语言中,字符用单引号,字符串用双引号.在c1='a';中,'a'是字符常量,必须用单引号."a"表示字符串,包含两个字符,一个是'a',一个是'\0'. 用数组来存储字符串. ...
- 单引号、双引号、int和char
首先说一下C语言中用单引号和双引号的不同(一直搞不清楚): 单引号代表的是一个整数,而这个整数的值是编译器所采用的字符集中的字符序列对应的值.所以一般'A'和ASCII中的65意义相同.对于双引号定义 ...
- C语言 单引号和双引号的区别
最近的C语言课在教字符串,貌似N多同学搞不清楚单引号和双引号的区别,有人还以为在C语言里用哪个都可以...其实C语言中的单引号和双引号含义是一点也不一样滴... 1.含义不同. 用单引号引起的一个字符 ...
- [转]C语言单引号和双引号的区别
单引号和双引号在C中的意义完全不同,包围在单引号中的一个字符只是编写整数的另一种方法.这个整数是给定的字符在实现的对照序列中的一个对应的值,即ASCII码值.因此在一个ASCII实现中,‘a’和014 ...
- php中的单引号、双引号和转义字符
PHP单引号及双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name):最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出. 例如: <?php ...
- php中的单引号与双引号详解
一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes'"I am a string in double qu ...
- shell中的括号(小括号,中括号,大括号)及单引号、 双引号,反引号(``)
一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...
- Go单引号和双引号区别
首先做个测试,看下面那个选项是正确的: A. str:='abc'+'123'B. str:="abc"+"123"C. str:='123'+"ab ...
- shell脚本中:单引号和双引号的区别
单引号和双引号的区别 前面我们还留下一个疑问,定义变量时,变量的值可以由单引号' '包围,也可以由双引号" "包围,它们到底有什么区别呢?不妨以下面的代码为例来说明: #!/bin ...
随机推荐
- spring笔记4-事务管理
一.xml配置文件形式 通过转账案例,学习事务管理 1.建立数据库 2.编写entity package huguangqin.com.cnblogs.entity; public class Use ...
- CSS3制作3D旋转视频展示区
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CRM的划分
CRM提供完整的客户生命周期管理解决方案,帮助您管理各项与客户有关的事件,包括市场.销售以及客户支持等方面,优化事件处理流程,从而赢得更多客户,并提高客户满意度. 按企业经营类型划分 ...
- 转:解决“arcsde服务启动又停止的问题” - shmiloy001的专栏 - 博客频道 - CSDN.NET
)查看原因 该问题产生的原因可查看文件:F:\Program Files\ArcGIS\ArcSDE\ora11gexe\etc\sde_esri_sde.log 文件中提示密码失 ...
- 转:ACCESS数据库转ORACLE数据库分享
来源: 作者:zz 网上有很多文章介绍access转oracle数据库的方法,本人都尝试了,不是很成功,列举一下,后来人不必盲目试了,基本不成功: 1.Access-->excel-->P ...
- 海量数据去重之SimHash算法简介和应用
SimHash是什么 SimHash是Google在2007年发表的论文<Detecting Near-Duplicates for Web Crawling >中提到的一种指纹生成算法或 ...
- Struts2_总结
还未学习的内容,如果到时候要用到,再去学.1.Lamda 表达式(很复杂,很少用)2.验证框架(默认验证方法 validation.方法开始前验证.开始后验证)3.UI标签(用的不多)4.类型转换中的 ...
- vos忙时闲时费率不一样怎么设置
问题: 现有一客户要求上午闲时由原来的9:00追加到9:30 即: 9:30——12:00为忙时 14:00——18:00为忙时 其他为闲时 忙时费率为0.04元即4分 闲时费率为0.025元即2分5 ...
- Windows计算下载文件的SHA256 MD5 SHA1
引用自 http://blog.163.com/licanli2082@126/blog/static/35748686201284611330/ certutil -hashfile yourfil ...
- POJ-3111 K Best---二分求最大化平均值
题目链接: https://cn.vjudge.net/problem/POJ-3111 题目大意: 卖宝救夫:Demy要卖珠宝,n件分别价值vi 重 wi,她希望保留k件使得 最大. 解题思路: # ...