C语言中的字符型数据(char型)表示:字母、符号和一些动作(如:回车)。它占用存储单元1个字节也就是8位,如果把它看成是有符号型char类数据,它的数据范围是(-128—127),如果看成无符号型char类数据,那他的数据范围是(0-255);下面我们对char类数据做个更加全面的了解。
1、如何声明
1.1 字符数据声明定义必须使用单引号,比如下面
char num='a';
解释:把字符常量a赋给变量num;
char sum='\a';
解释:把字符常量\a赋予变量sum;\a表示计算机响铃一次;
1.2 我们知道ASCII标准把我们常用的字符都进行了标准化,每一个字符对应一个整数值,当然这个整数值分别可以使用八进制、十六进制或十进制表示。比如下面
char dur='A';等同于int dur=0101;等同于int dur=0x41;等同于char dur=65;
备注:0101是整型数八进制的书写,0x41是整型数十六进制的书写。因为上面四种最后打印的都是字符A,所以我们可以说她们相同的表示,但是我们按照标准的规范声明是“char dur ='A';”这一点大家要注意。
同时上面四种声明存储的形式不一样,但最后输出是一样的,说明数据的打印输出和格式符号%d、%c有关,而与是十进制、十六进制或字符型存储无关。
2、char型数据的输出和什么有关(printf)
2.1字符型数据的输出格式符是%c;如果我们想把字符所对应的八进制或十六进制直接输出,怎么办?我们可以把格式符换成%o或%x(%#o或%#x)最后输出是一样的,说明数据的打印输出和格式符号%d、%c有关,而与是十进制、十六进制或字符型存储无关。
2、char型数据的输出(printf)
2.1字符型数据的输出格式符是%c;如果我们想把字符所对应的八进制或十六进制直接输出,怎么办?为此C语言做了一个“转义序列符”,我们可以理解字符使用的快捷键。
#include<stdio.h>
int main(void)
{
printf("gramps sez,\''a \\ is a backslash.\''\n");
getchar( );
return 0;
}
这个程序的输出结果是:gramps sez,"a\ is a backslash."
下面我们来分析这条程序:printf("gramps sez,\''a \\ is a backslash.\''\n");
它使用的转义序列符有:\''和\\(\''输出双引号,而\\输出符号\)所以从这条程序可以看出,需要使用这些符号,通过转义序列符可以直接输出,很方便,如果不这样,那只哟通过声明变量,把字符赋给变量然后再输出,通过格式符%c;这样肯定麻烦的多。
总之来说字符数据除了有ASCII规定的还有C语言的转义序列符,根据需要选择合适的书写。
ASCII