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 ...
随机推荐
- BOM DOM区别 来源
DOM 是为了操作文档出现的 API,document 是其的一个对象:BOM 是为了操作浏览器出现的 API,window 是其的一个对象. BOM是浏览器对象模型,DOM是文档对象模型,前者是对浏 ...
- foxmail6.5 不能收取电子邮件,反复提示输入密码?
使用foxmail时候报错:-err system resource error,system close connect,code=<1014>,id=<1>重新输入密码吗? ...
- linux脚本的source和reload
什么时候用reload?有些程序, 当你修改了配置文件后, 需要重启之后, 配置才能生效,但是 这个程序又不能 重启 , 如大公司的httpd服务 因此, 当你修改完了之后, 需要在不重启服务的情况下 ...
- Node.js-sublime text3 配置node.js(ERROR: The process "node.exe" not found.)
默认已经安装好sublime.node和npm 1.sublime的node.js插件下载 由于在package control上经常下载失败,所以这里直接从GitHub上进行下载! GitHub下载 ...
- leetcode 136、Single Number
Given a non-empty array of integers, every element appears twice except for one. Find that single on ...
- leetcode: 哈希——two-sum,3sum,4sum
1). two-sum Given an array of integers, find two numbers such that they add up to a specific target ...
- 使用Excel调用ABAP系统的函数
效果:在excel里创建一个按钮,开发一些VB script,可以连接指定的ABAP系统并执行系统里的ABAP function module. 在这里例子里执行ABAP系统的函数TH_USER_LI ...
- 触发transition的几种方式--转
鼠标单击 获取焦点 或元素发生任何改变,怎么说呢,目前的理解是,元素发生了什么改变,使得它跟以前不一样了.比如同样是p元素,先有一个样式.后来这个p被hover了.被focus了.或者通过另外一条途径 ...
- 使用navigate导出表数据
以下内容不算技术贴,只能算是技巧贴,要做的一个操作,从数据库A中把元素A1表,导入到数据库B中B1表,且,A1表的数据是部分导出,那么有两种方法进行导出 方法1: 选择数据表,右键,选择“转存储sql ...
- Gym 100169A 最短路
题意:不久后滑铁卢将会变得非常冷,但是幸运的是,很多建筑都被桥梁和隧道连接着,所以你不需要总是走在外面.但是现在建筑 物之间的连接是错综复杂的,很难知道某两个建筑物之间的最优路线,所以需要你写程序判断 ...