学习自狄泰软件学院唐佐临老师C语言课程,文章中图片取自老师的PPT,仅用于个人笔记。
1 C语言中的单引号用来表示字符字面量,单引号括起来的单个字符表示的是整数 ASCII码 一个字节
2 C语言中的双引号用来表示字符串字面量,字符串被编译的过后,就会被存放在内存中的某个地址空间中,而我们在程序中得到的就是这一段存放字符串的内存空间的地址,占用四个字节。
“a” 第一个字节是 a 第二个字节是 ‘\0’
字符指针指向字符串字面量
数字1 字符1 字符串1
实验1
程序中不能访问 低于 0x08048000的地址空间,会产生段错误。
#include <stdio.h>
int main()
{
char* p1 = 1 ; // 数字1被当做了被当成内存地址 属于内存中的低地址范围,访问改地址会有段错误
char* p2 = '1'; // 字符字面量 ‘1’ 的 ASCII码 0x31 被当成内存地址 属于内存中的低地址范围,访问改地址会有段错误
char* p3 = "1"; // 字符串字面量 “1”’ 的地址会 高于 0x08048000的地址空间,可以访问该地址
printf("%s, %s, %s", p1, p2, p3);
printf('\n'); // 字符字面量 '\n' ASCII码为 0x00000010,被当做地址访问,属于内存中的低地址范围,访问改地址会有段错误
printf("\n");//字符串字面量 "\n" 被当成了字符串,合法的地址 可以访问
return 0;
}
实验2
#include <stdio.h>
int main()
{
char c = " "; //用字符串地址(四个字节) 初始化 字符变量c(一个字节),将会产生截断
// 比较不通过 不会执行 while
while( (c == "\t") || (c == " ") || (c == "\n") )
{
scanf("%c", &c);
}
return 0;
}
实验3
#include <stdio.h>
int main()
{
char c = ' '; //空格的 ASCII码 占用一个字节
//比较成功
while( (c == '\t') || (c == ' ') || (c == '\n') )
{
scanf("%c", &c);
}
return 0;
}
字符串被编译的过后,就会被存放在内存中的某个地址空间中,而我们在程序中得到的就是这一段存放字符串的内存空间的地址,占用四个字节。