2015-10-26 单引号和双引号 课程笔记

先看一段代码,如下:

 1 int main()
 2 {
 3 char *p1 = 1;
 4 char *p2 = ‘1‘;
 5 char *p3 = "1";
 6
 7 printf("%s,%s,%s",p1,p2,p3);
 8 printf(‘\n‘);
 9 printf("\n");
10
11 return 0;
12 }

上述代码中首先定义了三个指向char型的指针变量,并给这三个指针变量赋了初值。接下来作者的原意,是想利用printf函数将上面的三个1打印出来,但是很遗憾,没有实现作者想要的效果。那么问题在何处呢?
首先我们来看第3行代码,char *p1 = 1;这是什么意思呢?这条代码可以拆分为以下两条代码:char *p1; p1 = 0x0000 0001;也就是说将内存地址0x0000 0001赋给指针变量p1(此处我们且不考虑要不要强制类型转化,但是原则上肯定是需要的),然后在后面的代码中利用printf将地址0x0000 0001单元里面的内容打印出来。通常在内存低地址处都是预留给操作系统使用的。贸然对其进行访问,有可能造成错误。显然这里实现不了作者想要的效果。

接着我们来看第4行代码,char *p2 = ‘1‘;这又是什么意思呢?同样这条代码可以拆分为两条代码,char *p2;p2 = 0x0000 0031;为什么是0x0000 0031呢?在第四行代码中是将一个单个的字符‘1‘赋给了指针变量p2,而单个的字符的值是一个8位的整数,在ASCII码中数字1的码为0x31,。所以上述第四行代码的意思就是将内存地址0x0000 0031赋给了指针变量p2,同样如上所述,这也无法实现作者想要的效果。

第5行代码,char *p3 = "1";很显然这是我们很熟悉的用法,这条代码同样可以拆分为两条:char *p3; p3 ="1";p3 是一个指向char型的指针变量,而"1"是一个字符串,在之前我们不止说过一次,字符串的值是一个地址,该地址指向该字符串。所以这条代码若是单独的利用printf,肯定是能事先作者的目的的。

接下来我们来看第8行代码,printf(‘\n‘);,这行代码正确吗?我再VS下编译了一下,编译有警告,运行有错误。说到这里,我们来看一下printf函数的原型:

_CRTIMP __checkReturn_opt int __cdecl printf(__in_z __format_string const char * _Format, ...);

关于那些输入输出的修饰符我们就不看了,重点我们看一个东西,就是第一个形参的类型,是一个const char *的变量,后面的...表示可变的参数。类似于C#中的params,当我们执行printf(‘\n‘);时编译器首先会把‘\n‘的值转化成一个const char*的指针变量,而‘\n‘的值是0x0a,同样这里就会系统就会去访问地址为0x0000 000a处的内容,但是很显然,该地址里面的内容不是我们想要的。

OK~进入正题!

1、关于单引号和双引号的不同点

单引号在C语言中用来表示单个的字符常量,想必这个大家都很熟悉了。

例如:‘a‘表示字符常量‘a‘,在内存中占一个字节,‘a‘+1,表示将‘a‘的ASCII码加一,得到‘b‘;

双引号在C语言中用于表示字符串常量。

例如:"a"表示字符串常量,在内存中占两个字节,因为最后还有一个‘\0‘,"a"+1表示指针运算,结果指向字符串"a"的结束符‘\0‘;

2、一些总结

2.1 本质上用单引号括起来的一个字符代表整数。该整数是该字符的ASCII码。

2.2 双引号括起来的字符串代表指针常量。该指针指向该字符串。

时间: 2024-10-27 18:03:07

2015-10-26 单引号和双引号 课程笔记的相关文章

第14课 单引号和双引号

1. 单引号和双引号 (1)C语言中单引号用来表示字符字面量(是个数值) (2)C语言中双引号用来表示字符串字面量(是个指针) ①'a'表示字符字面量(97),在内存中占用1个字节,'a'+1表示'a'的ASCII码加1,即'b' ②"a"表示字符串字面量(是个指针),在内存中占2个字了,"a"+1表示指针运算,指向"a"的结束符"\0" [实例分析]单引号与双引号的本质 #include <stdio.h> in

[转载]PHP效率计:从引号开始(单引号、双引号效率区别)

原文地址:http://blog.sina.com.cn/s/blog_640b03390100sham.html 一直以来,程序的执行效率就是人们所关注的,在PHP中也不例外,从最简单的引号,也在思考他的效率.我们特别做了实验,我们自称这个实验可能前无古人,后无来者.我们的实验是借助最初级的实验方法:累积法和多次实验求平均值. 实验一:在普通情况下的效率我们的实验是5000次执行10000个字节的文件,获得解析过程中的速度.首先,本实验特别规定一个单位,这是为了更好地表示以及排除计算机本身效率

PHP效率计:从引号开始(单引号、双引号效率区别)

一直以来,程序的执行效率就是人们所关注的,在PHP中也不例外,从最简单的引号,也在思考他的效率.我们特别做了实验,我们自称这个实验可能前无古人,后无来者.我们的实验是借助最初级的实验方法:累积法和多次实验求平均值. 实验一:在普通情况下的效率我们的实验是5000次执行10000个字节的文件,获得解析过程中的速度.首先,本实验特别规定一个单位,这是为了更好地表示以及排除计算机本身效率的差异.时间单位 TT,表示约 7.2×10[sup]-8[/sup]s .我们获得四组实验数据,可理解为表示 'a

php中的单引号与双引号详解

一.引号定义字符串 在Php中,通常一个字符串被定义在一对引号中,如: 'I am a string in single quotes'"I am a string in double quotes" Php语法分析器是用成对的引号来判断一个字符串的.因此,所有字符串必须使用同一种单或者双引号来定义开始和结束.例如,下面的字串定义是不合法的: "I am not a valid string since I have unmatching quote marks''Me ne

单引号和双引号的区别、linux快捷键、zip压缩、lrzsz、vim常见问题

Day11-12-21 怎么去记忆? 大脑: 意识 == 内存 潜意识 === 硬盘 如何将知识放到潜意识中: 1. 交流讨论 - - 说出来 睡觉前,把当天学的内容和复习的内容,以语音的形式表达出来. 微信群里说出来. 自学知识点,分享给大家. 2. 画图表达出来 本章正题:单引号和双引号的区别.linux快捷键.zip压缩.lrzsz.vim常见问题 1.1 单引号.双引号.反引号的区别: 1)单引号:单引号的内容会原封不动的先试穿了,所见即所得,吃啥吐啥 2)双引号:与单引号类似,双引号里

PHP单引号和双引号区别

关于单引号和双引号的区别和效率问题.很多朋友了解的不是很清楚,一直以为PHP中单引号和双引号是互通的,直到有一天,发现单引号和双引号出现错误的时候才去学习研究.所以今天再拿出来谈谈他们的区别,希望大家不要再为此困惑." " 双引号里面的字段会经过编译器解释,然后再当作HTML代码输出.' ' 单引号里面的不进行解释,直接输出.从字面意思上就可以看出,单引号比双引号要快了.例如:$abc='my name is tome';echo $abc //结果是:my name is tomec

单引号中有双引号,双引号还需要引号怎么办

单引号中有双引号,双引号还需要引号怎么办     今天,我在做一个日历控件时,发现在拼接HTML中的input时,出现引号里还有引号:     '<input type="button" onclick="findSearch("MU")"'/>     结果,火狐浏览器出现"死机"现象.     将findSearch中的双引号改为单引号,结果出现报错提示:     后来将findSearch中的双引号利用转义字

linux bash shell中,单引号、 双引号,反引号(``)的区别及各种括号的区别

一.单引号和双引号 首先,单引号和双引号,都是为了解决中间有空格的问题. 因为空格在Linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错.为了避免这个问题,因此就产生了单引号和双引号.他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的'$'(参数替换)和'`'(命令替换)是例外.所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符$和命令替换符`. 所以下面的结果:num=3echo '$num'$numecho "$n

mysql单引号和双引号

表名,列名最好用`(esc下面那个,不用`会出错) 这就要从双引号和单引号的作用讲起:双引号里面的字段会经过编译器解释然后再当作HTML代码输出,但是单引号里面的不需要解释,直接输出.例如:$abc='I love u';echo $abc //结果是:I love uecho '$abc' //结果是:$abcecho "$abc" //结果是:I love u所以在对数据库里面的SQL语句赋值的时候也要用在双引号里面SQL="select a,b,c from ...&q