3.4.3 字符型常量
字符型常量与整型、实型有所不同,需要使用定界符进行限制。字符型常量包括两种:字符常量和字符串常量。
1.字符常量
使用一对单直撇引号(' ')括起来的字符就是字符常量,如'A'、'#'、'b'等。
字符常量只能包括一个字符,不能是字符串。例如,'A'是正确的,但用'AB'来表示字符常量就是错误的。
字符常量是区分大小写的。例如,'A'和'a'代表的是不同的字符常量。
' '代表的是定界符,不属于字符常量的一部分。
【例3.1】输出“Fine Day!”(实例位置:资源包\TM\sl\03\01)
在本实例中,使用putchar函数将多个字符常量依次输出,在控制台中显示“Fine Day!”。
#include <stdio.h> int main() { putchar('F'); /*输出字符常量F*/ putchar('i'); /*输出字符常量i*/ putchar('n'); /*输出字符常量n*/ putchar('e'); /*输出字符常量e*/ putchar('\0'); /*字符结束标志*/ putchar('D'); /*输出字符常量D*/ putchar('a'); /*输出字符常量a*/ putchar('y'); /*输出字符常量y*/ putchar('!'); /*输出字符常量!*/ putchar('\n'); /*进行换行*/ return 0; }
运行程序,显示效果如图3.3所示。
注意
给char型变量赋值时不可以使用3个单引号。这样写编译器会不知道从哪里开始,到哪里结束,进而产生错误。例如,下面的赋值语句会提示“error C2001:newline in constant”错误。
char cChar='A''; /*使用3个单引号为字符型赋值*/
2.字符串常量
字符串常量是用一对双直撇引号(" ")括起来的若干字符序列。例如,"Have a good day! "和"beautiful day"即为字符串常量。如果字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。
在C语言中存储字符串常量时,系统会在字符串的末尾自动添加一个“\0”,作为字符串的结束标志。例如,字符串"welcome"在内存中的存储形式如图3.4所示。
图3.3 输出“Fine Day!”
图3.4 “\0”为系统所加
【例3.2】打印《静夜思》诗句(实例位置:资源包\TM\sl\03\02)
在本实例中,使用printf函数将字符串常量《静夜思》诗句在控制台输出显示。
#include <stdio.h> /*包含头文件*/ int main() { printf("窗前明月光\n"); /*输出字符串*/ printf("疑是地上霜\n"); printf("举头望明月\n"); printf("低头思故乡\n"); return 0; /*程序结束*/ }
运行程序,显示效果如图3.5所示。
字符常量和字符串常量的差别主要体现在以下几个方面。
定界符不同。字符常量使用的是' ',而字符串常量使用的是" "。
长度不同。字符常量只能有一个字符,长度为1。字符串常量的长度可以是0,也可以是任意值。即使字符串常量中的字符只有1个,长度也不是1,而是2。例如,字符串常量"F",其在内存中的存储情况如图3.6所示(因为系统自动添加了结束字符“\0”,所以其长度为2)。
图3.5 输出字符串
图3.6 字符串“F”
存储方式不同。字符常量中存储的是字符的ASCII码值;字符串常量不仅要存储有效的字符,还要存储结尾处的结束标志“\0”。
ASCII码到底是什么呢?在C语言中,所使用的字符被一一映射到一个表中,这个表称为ASCII码表,如表3.2所示。
表3.2 ASCII码表