第14课 单引号和双引号

1. 单引号和双引号

(1)C语言中单引号用来表示字符字面量(是个数值

(2)C语言中双引号用来表示字符串字面量(是个指针

  ①‘a‘表示字符字面量(97),在内存中占用1个字节,‘a‘+1表示‘a‘的ASCII码加1,即‘b‘

  ②"a"表示字符串字面量(是个指针),在内存中占2个字了,"a"+1表示指针运算,指向"a"的结束符"\0"

【实例分析】单引号与双引号的本质

#include <stdio.h>

int main()
{

    char* p1 =  1 ;//p1=0x0000001,内存低地址,不可访问
    char* p2 = ‘1‘;//p2=0x0000031,内存低地址,不可访问
    char* p3 = "1";//p3=0x008A5860,合法地址

    printf("*p1=%s\n", p1); //段错误,内存不可访问
    printf("*p2=%s\n", p2); //段错误,内存不可访问
    printf("*p3=%s\n", p3);   //合法,*p3==1

    printf(‘\n‘);    //段错误,‘\n‘表示10,即内存0x000000A处的内存值
    printf("\n");    //合法,打印换行

    return 0;
}

小贴士】

(1)字符字面量被编译为对应的ASCII码

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

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

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

【实例分析】混淆概念的代码

#include <stdio.h>

int main()
{
    //错误的方法
    char c = " ";//将空字符串指针的低地址1个字节的数值赋给c
    //分别与"\t"、空字符串、\n的指针的1个字节比较,显然不等
    while( (c == "\t") || (c == " ") || (c == "\n") )
    {
        scanf("%c", &c);
    }

    //正确的方法
    char c = ‘ ‘; //将空字符的ASCII码赋给c
    //c分别与制表符、空格、\n的ASCII码比较
    while ((c == ‘\t‘) || (c == ‘ ‘) || (c ==‘\n‘))
    {
        scanf_s("%c", &c);
    }

    return 0;
}

▲分析  char c = "string";发生了什么

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

  ②内存地址占用4个字节,而变量c只占用1个字节,由于类型不同,赋值后产生截断

2. 小结

(1)单引号括起来的单个字符代表整数

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

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

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

时间: 2024-08-06 16:47:01

第14课 单引号和双引号的相关文章

[转载]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

Linux shell 单引号和双引号

在编写shell脚本的时候经常会用到引号,有些时候却老是忘记单引号和双引号之间的区别, 所以就整理一下供以后脑子不好使了的时候前来复习一下.首先说下他们的共同点: 好像就只有 一个,就是它们都可以用来界定一个字符串,这个没什么好解释的,真正需要记住的是它们区别, 所以经过整理后,它们的区别主要包括: 1).单引号属于强引用,它会忽略所有被引起来的字符的特殊处理,被引用起来的字符会被原 封不动的使用,唯一需要注意的点是不允许引用自身: 2).双引号属于弱引用,它会对一些被引起来的字符进行特殊处理,

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

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

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

单引号中有双引号,双引号还需要引号怎么办     今天,我在做一个日历控件时,发现在拼接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

单引号、双引号 Html转义符 ----2014年12月2日

&apos;----单引号 "-----双引号 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下: <input value="Test" type="button" onclick="alert(""OK"");" /> IE提示出错后,再漫不经心地改为: <input value="Test" type="button&

C语言中的单引号和双引号含义

C语言中的单引号和双引号含义迥异, 用单引号引起的一个字符实际上代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值,因此,采用ASCII字符集的编译器而言,'a'的含义与0141或97严格一致. 而用双引号引起的字符串,代表的却是一个指向无名数组起始字符的指针,该数组被双引号之间的字符以及一个额外的二进制值为零的字符'\0'初始化.