单引号和双引号
·C语言中的单引号用来表示字符字面量
·C语言中的双引号用来表示字符串字面量

image.png
小贴士:
·字符字面量被编译为对应的ASCII码
·字符串字面量被编译为对应的内存地址
·printf的第一个参数被当成字符串内存地址
·内存的低地址空间不能在程序中随意访问

image.png
字符串的内存地址都是大于0x08048000,是可以随便访问的;小于0x08048000为低内存空间,字符串地址不能随意访问。

image.png

单引号和双引号的本质14-1.c

include "stdio.h"

int main()
{

char* p1 = 1;
char* p2 ='1';
char* p3 ="1";
printf("%s, %s, %s",p1 ,p2 ,p3);//error

printf("\n");
printf('\n');        //error
return 0;

}
输出结果:
error
结果分析:
char* p1 = 1; 表示的是对用ASCII码,地址比0x08048000小,为低地址内存,所以报错;
char p2 ='1';printf('n');char p2 ='1';也是同理;

image.png

char是一个内存地址,""一个字符串地址,字符串的地址为4个字节,程序会报错
例子14—2:

include "stdio.h"

int main()
{

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

}
输出结果:
t 空格 回车会一直循环while,输入其他字符就会退出while

·单引号括起来的单个字符代表整数
·双引号括起来的字符代表字符指针(说白了就是一段内存地址)
·C编译器接受字符和字符串的比较,无任何意义
·C编译器允许字符串对字符变量赋值,只能得到错误


YingLi
6 声望4 粉丝

From zero to hero.