总结
- 无论是中文还是其他语言,文字本身是图形符号。
- 传输和描述图形是一件很麻烦的事;
- 所以,如果只是要描述和传输字母,传输它们的编码更为方便。
- 实际上,在计算机的文件中、内存中存储字符时,存储的是它们的编码。
ABC → 65 66 67 - 在显示字符时,底层驱动(硬件或软件)会自动根据编码取出字库中这个字符的图形数据,并将其绘制在显示设备上。
65 → 显存地址 - C语言使用char数据类型存储字符的编码
- 字符编码中除了常用字符(A-Z,a-z,制表符),还有控制字符(用于控制显示或打印设备的字符)
回车符(13)——控制打印机的打印头移动到最左侧
换行符(10)——控制打印机滚轴滚动一行
Beep(7)——控制打印机或者计算机发出铃声 - 字符变量——char类型变量其实存放的是一个编码,这个编码是整型值,所以可以直接将整型值赋值给char类型变量。
- 字符常量——但是,写程序的时候不能记得每一个字符的编码,所以我们可以使用字符常量来表示一个字符,字符常量就是以一对单引号包含的单个字符;
- C语言不提供用于存储字符串的基础数据类型,如果要存储多个字符,有两种方式:
a) 字符串常量
由一对双引号包含的多个字符,称为字符串常量。
程序中字符串常量,编译器会自动根据其中的字符个数为其分配内存,分配的大小是(字符的个数+1),将字符存储进去,并将最后一个字节设置为0,ASCII码值为0的字符约定俗成的被当做字符串结束的标志。
Question:字符串常量的值是什么?
Answer: 字符串常量的值,是内存中存储这个字符串的内存空间的首地址。
b) 单独分配指定大小的内存空间,用以存储可变的字符串。
- 在使用printf函数时,如果使用%s作为占位符输出字符串,使用的语句是:
printf("%s", str);
此时,printf函数会从指针变量str指向的位置开始输出字符
实例
项目一
在下面的程序中的main内添加代码,不使用printf函数显示指针变量str指向的字符串。
#include <stdio.h>
int main()
{
char* str= (char*)"Hello,World";
printf("这个字符串被存储在首地址为%p的内存空间\n", str);
return 0;
}
1.for循环版
#include <stdio.h>
int main() //------------for循环版
{
char* str = (char*)"Hail Hdyra!";
for (int x = 0; x <= 999; x++)
{
char i = *(str + x);
if (i == 0)
{
break;
}
putchar(i);
}
return 0;
}
2.while循环版
#include <stdio.h>
int main() //-------------while循环版
{
char* str = (char*)"Hail Hdyra!";
while (*str != 0)
{
putchar(*str);
str++;
}
return 0;
}
项目二
自定义一个函数printString,使这个函数用于显示字符串的每个字符和它所在内存空间的地址
/*
ProgramName:定义printString函数用于显示字符串的每个字符和它所在内存空间的地址
Date:2020年3月16日00点22分
Author:KrisWi
*/
#include <stdio.h>
int printString(const char* str); //函数printString的声明
int main()
{
char* PutStr = (char*)"Hail Hydra!";
printString(PutStr);
return 0;
}
int printString(const char* str)
{
while (*str != '\0')
{
putchar(*str);
printf("这个字符存储在地址为%p的内存空间里\n", str);
str++;
}
return 0;
}
版权属于:KrisWi
本文链接:http://7k.cx:83/index.php/archives/59/
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。