当前位置: 移动技术网 > IT编程>开发语言>C/C++ > C语言的单引号和双引号实例讲解

C语言的单引号和双引号实例讲解

2018年10月03日  | 移动技术网IT编程  | 我要评论

成人16p,生来是王侯,动漫巴士

c语言中的单引号用来表示字符字面量

c语言中的双引号用来表示字符串字面量

例如:

'a'表示字符字面量,占1个字节,'a' + 1表示 'a'的ascii码加1,结果为'b'

"a"表示字符串字面量,占两个字节,"a" + 1表示指针运算,结果指向"a"的结束符'\0'

来看一段下边的代码:

#include 

int main()
{
char* p1 =  1 ;
char* p2 = '1';
char* p3 = "1";

printf("%s, %s, %s", p1, p2, p3);

printf('\n');
printf("\n");

return 0;
}

编译运行结果如下:程序奔溃。

\

下边我们来分析分析为什么程序会崩溃,首先来看几个知识点:

-字符字面量被编译为对应的ascii码

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

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

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

有了如上几个知识点,那么上边代码的三个指针变量,指向的内存就可表示为如下:

\

\

从上图的内存分布,我们知道,代码已经试图去访问低地址了,所以会产生程序奔溃。

最后留一段小代码供大家分析,请思考如下代码执行后发生什么:

#include 

int main()
{

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

提示:char c = "string"发生了什么?

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

-内存地址占用4个字节,而变量c只占用1个字节

-由于类型不同,赋值后产生截断

总结:

1、单引号括起来的字符代表字符指针

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

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网