单引号和双引号

本文深入探讨了C语言中各种符号的使用技巧,包括注释符号、接续符和转义符、单引号和双引号的区别及应用场景,通过实例分析了逻辑运算符、位运算符等的使用,并对++、--操作符、优先级和类型转换进行了详细的分析。

符号的技巧

专题二:符号的技巧。包括以下章节:

  • 注释符号
  • 接续符和转义符
  • 单引号和双引号
  • 逻辑运算符使用分析
  • 位运算符分析
  • ++、–操作符使用分析
  • 优先级和类型转换分析

问题

  • 讨论这个问题有意义吗?
#include <stdio.h>

int main()
{
    char* p1 = 1; //p1指向内存地址为1的地方。赋值会出现警告,不会编译出错。
    char* p2 = '1';//p2指向内存地址为49的地方('1'=49)。
    char* p3 = "1";//p3指向内存中的字符串"1"常量的地址。

    printf("%s, %s, %s\n", p1, p2, p3);//低位的内存地址是给操作系统使用的,不能访问。如果访问会出现段错误。
    printf('\n');//printf第一个参数是char* fmt,相当于char* fmt = 10。('\n'=10)
    printf("\n");

    return 0;
}

单引号和双引号

  • c语言中的单引号用来表示字符常量
  • c语言中的双引号用来表示字符串常量
    ‘a’表示字符常量,在内存中占1个字节,’a’+1表示’a’ASCII码+1,结果为’b’;
    “a”表示字符串常量,在内存中占2个字节(’a’和’\0’),”a”+1表示指针运算,结果指向”a”结束符’\0’。

实例分析3-1:混淆概念的代码

3-2.c

#include<stdio.h>

int main()
{
    //将字符串" "赋值给字符c:表示将一个字符串的内存地址赋值给字符c。假如字符串" "的在内存中的地址是0xAABBCCDD,那么字符c值未0xDD。(取最后两位)
    char c = " ";
    //c的值0xDD,与"\t"的地址值," "的地址值,"\n"的地址值比较
    while(c == "\t" || c == " " || c == "\n")
    {
        scanf("%c", &c);
    }

    return 0;
}

编译结果:
这里写图片描述

正确的写法:

3-3.c

#include<stdio.h>

int main()
{
    char c = ' ';

    while(c == '\t' || c == ' ' || c == '\n')
    {
        scanf("%c", &c);
    }

    return 0;
}

结果:
这里写图片描述

小结

  • 本质上单引号括起来的一个字符代表一个整数
  • 双引号括起来的内容代表一个字符串,一个指针(字符串常量所在的内存地址)
  • c编译器结束字符和字符串的比较,可意义是错误的
  • c编译器允许把字符串赋值给一个字符变量,但是没意义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值