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

    单引号和双引号:

    下面的程序片段合法吗?

    示例程序:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5 
     6     char* p1 =  1 ;
     7     char* p2 = '1';
     8     char* p3 = "1";
     9 
    10     printf("%s, %s, %s", p1, p2, p3);
    11     
    12     printf('
    ');
    13     printf("
    ");
    14     
    15     return 0;
    16 }

    编译运行结果如下:

    小贴士:

    上面程序产生错误的原因:

    低于0x08048000的地址是不能随便访问的。

    printf(' ')会产生段错误,因为printf把' '的aisc码当成了地址。aisc码为0x00000010。

    如下:

    混淆概念的代码示例:

     1 #include <stdio.h>
     2 
     3 int main()
     4 {
     5 
     6     char c = " ";
     7     
     8     while( (c == "	") || (c == " ") || (c == "
    ") )
     9     {
    10         scanf("%c", &c);
    11     }
    12     
    13     return 0;
    14 }

    编译运行结果如下:

    while循环没有得到执行。

    第6行将字符串的地址赋值给了c。

    赋值给c的地址值发生了截断,所以第8行的判断中c的值是不会等于" "字符串的地址的。

    将程序中的双引号改为单引号就可以得到预期的效果了。

    小结:

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

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

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

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

  • 相关阅读:
    Prototype的深度探索
    MySQL LIST分区
    CentOS6下Haproxy的安装配置
    haproxy做TCP层的负载均衡
    Shape Control for .NET
    如何通过 HSB 颜色模式构建夜间模式
    使用ICSharpCode.TextEditor制作一个语法高亮显示的XML编辑器
    Roslyn介绍
    信息安全名词
    用彩虹表破解MD5、LM Hash等复杂加密密码
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9535392.html
Copyright © 2011-2022 走看看