zoukankan      html  css  js  c++  java
  • 第14课 单引号和双引号

    1. 单引号和双引号

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

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

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

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

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

    #include <stdio.h>
    
    int main()
    {
    
        char* p1 =  1 ;//p1=0x0000001,内存低地址,不可访问
        char* p2 = '1';//p2=0x0000031,内存低地址,不可访问
        char* p3 = "1";//p3=0x008A5860,合法地址
    
        printf("*p1=%s
    ", p1); //段错误,内存不可访问
        printf("*p2=%s
    ", p2); //段错误,内存不可访问
        printf("*p3=%s
    ", p3);   //合法,*p3==1
    
        printf('
    ');    //段错误,'
    '表示10,即内存0x000000A处的内存值
        printf("
    ");    //合法,打印换行
        
        return 0;
    }

    小贴士】

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

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

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

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

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

    #include <stdio.h>
    
    int main()
    {
        //错误的方法
        char c = " ";//将空字符串指针的低地址1个字节的数值赋给c
        //分别与"	"、空字符串、
    的指针的1个字节比较,显然不等
        while( (c == "	") || (c == " ") || (c == "
    ") )
        {
            scanf("%c", &c);
        }
    
        //正确的方法
        char c = ' '; //将空字符的ASCII码赋给c
        //c分别与制表符、空格、
    的ASCII码比较
        while ((c == '	') || (c == ' ') || (c =='
    '))
        {
            scanf_s("%c", &c);
        }
        
        return 0;
    }

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

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

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

    2. 小结

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

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

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

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

  • 相关阅读:
    北京周末去哪儿 —— 玉渊潭
    Linux 添加中文字体库,解决Java 生成中文水印不显示问题
    海淀驾校拿本过程
    IOS 微信返回按钮事件控制弹层关闭还是返回上一页
    java 将mysql中Blob类型转为字符串或数字
    echarts 技巧自己的一些记录
    java发送post请求,使用multipart/form-data的方式传递参数,可实现服务器间文件上传功能(转)
    java 调用webservice接口wsdl,推荐使用wsdl2java,放弃wsimport
    北京周末去哪儿 —— 香山
    北京周末去哪儿 —— 百望山森林公园
  • 原文地址:https://www.cnblogs.com/5iedu/p/5323602.html
Copyright © 2011-2022 走看看