1.字符型数据
同整型数据、实型数据一样,字符型数据包括字符常量和字符变量。在C中,字符常量通常是用单引号括起来的一个字符,如'a'、'='、'?'等都是合法的字符常量。字符常量只能是单个字符而不可以是字符串,同时字符可以是字符集中的任意字符,但需要注意的是字符集中也含有数字,当数字被定义为字符常量时就不能参与运算了,如1和'1',一个是数字,一个是字符常量,并不相同。
2.字符变量
字符常量是用单引号括起来的单个字符,而字符变量是用来存储字符常量的。它的类型说明符为char,如:
char c='c';
在这里定义了一个变量名为c的字符变量,并把字符常量'c'储存在这个字符变量里面,其中的原理和整型变量的定义
int a=1;
是完全一致的。
3.字符型数据的存储和使用
前面提到,字符常量是单引号括起来的单个字符,因为在C中每个字符变量只被分配一个字节的存储空间,因此只能存储一个字符,字符值是以ASCII码的形式存储的,这个只需查找ASCII码表便可轻易获得,例如前面的:
char c='c';
通过char我们知道定义变量的数据类型是字符型,字符变量名是c,当完成字符变量的定义时,系统为字符变量c划分了一个字节的存储空间,在这一个字节的空间里面存储字符常量'c',查询ASCII表可知c的ASCII值为十进制的99,换成二进制就是01100011,所以实际上在这个字节里存储的内容就是01100011,从这里我们可以发现字符变量其实可以和整型量运算,只要让代表该字符量的十进制ASCII码参与运算就好了。
4.字符串常量
字符串常量是双引号括起来的字符序列,例如"CHINA","C Program"等都是合法的字符串常量,与字符常量的单个字符相比字符串常量含有一个或多个字符,前面举例过通过申明字符变量我们可以将字符常量赋值给一个字符变量,但C语言中是没有字符串变量的,所以都是用一个字符数组去存放一个字符串。简单介绍下数组的声明:
char c[10];
在这里我们申明了一个字符型数组,数字10为元素的个数,字符串常量就是通过采用数组的方式存放在内存当中的。
字符常量占用一个字节的内存,而字符串常量占用的字节为其含有的字符数量加1,因为字符串常量有个结束的标志"\0",其ASCII码值为0,所以字符串常量"china"占用的字节数为5+1,所以像字符常量'a'与字符串常量"a",二者虽然看起来区别不大,但前者只用一个字节存放a,后者却需要两个字节存放a和\0。
5.关于字符串和字符数组
字符数组由一组字符常量组成,例如:
char c[5]={'c','h','i','n','a'};
这里申明了一个字符数组,含有5个元素,数组名为c,后面大括号里的内容相当于对该数组做了一个赋值,和
int a=1;
是一个意思,当对所有的数组元素都完成赋值后就可以省略数组长度的申明,因此也可以写成:
char c[]={'c','h','i','n','a'};
系统自动判定长度为5,当然也可以同前面所说的那样,采用字符串常量的方式对一个字符数组进行赋值,如:
char c[]={"china"};
或
char c[]="china";
这里要注意因为字符串常量含有个“\0”的结束标志,所以相对于用单个字符一个一个赋值,用字符串常量赋值在内存中所占字节数是要多一个的。