单引号和双引号

本文探讨了C语言中单引号与双引号的区别,解析了它们如何影响字符与字符串的操作,并通过实例展示了不当使用可能导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先看下面一段程序:

#include <stdio.h>
int main()
{
    char* p1 =  1 ;
    char* p2 = '1';
    char* p3 = "1";

    printf("%s, %s, %s", p1, p2, p3);
    printf('\n');
    printf("\n");

    return 0;
}

上面的程序会出现段错误,因为p1和p2两个指针指向的位置是错误的。p1指向的是内存地址为1的位置,p2指向的是内存地址为字符‘1’的ASC码49的位置,这两个指针都指向较低的地址位,是野指针,这些地址是系统保留的不能使用。只有指针p3的用法是正确的
而且printf(‘\n’);的用法也是错误的,print第一个参数是指针,相当于给一个指针赋值,打印‘\n’的ASC码10地址的内容,这个地址是系统保留不能访问的。

C语言中的单引号用来表示字符常量,通常单引号传递的是ASC码数值。
C语言中的双引号用来表示字符串常量,通常双引号传递的是存储该内容的地址值。

举一个例子:

#include <stdio.h>
int main()
{
    char c = " ";
    while( c=="\t" || c==" " || c=="\n" )
    {
        scanf("%c", &c);
    }    
    return 0;
}

这段代码的本意是将键盘输入的值与三个值进行比较当不是这三个时就退出,但是由于定义的c是字符变量,不是字符串,导致了程序的功能错误。char c = ” “;的含义是将“ ”字符串的地址赋值给c,但是地址是32位,c是1个字节8位,于是地址的低8位赋值给c,这样c跟三个值都不相等,程序运行后立刻退出。可以把双引号全部变为单引号。

小结

本质上单引号括起来的一个字符代表整数
双引号括起来的字符代表一个指针,是一个地址
C编译器接受字符和字符串的比较,可意义是错误的
C编译器允许字符串对字符变量赋值,其意义是可笑的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值