1. 字符常量
如果我想在屏幕上打印"HelloWorld"。应该怎样做呢?大家应该很熟悉这个代码了。
#include <stdio.h>
int main()
{
printf("HelloWorld");
return 0;
}
我们使用printf
函数,第一个参数是需要输出的字符串,而字符串是用双引号包括的。
不知道大家有没有考虑过,字符串是由什么组成的呢?
没错,就是我们这一节要讨论的——字符
。
如果我单独用字符来打印HelloWorld
,将代码按照如下方式修改:
#include <stdio.h>
int main()
{
printf("H");
printf("e");
printf("l");
printf("l");
printf("o");
printf("W");
printf("o");
printf("r");
printf("l");
printf("d");
return 0;
}
这样看上去,的确是在一个个地输出字符。但是,我们要注意,字符串是用双引号包括的。也就是说,这上面输出的仍然是字符串,只不过每一个字符串仅包含一个字符。
那我们怎样,用单个字符的形式来输出呢?
定义:字符常量由单引号包括。
类似于'a' , 'b' , 'c' , '1' , '2'。这样的都是字符常量。
字符常量通常只写一个字符,如果需要多个字符,请使用字符串"ab"。
既然单引号包括的是字符,那我们这样打印行不行?
#include <stdio.h>
int main()
{
printf('H');
printf('e');
printf('l');
printf('l');
printf('o');
printf('W');
printf('o');
printf('r');
printf('l');
printf('d');
printf('\n');
return 0;
}
答案是不行的,这样会导致编译报错。因为,我们之前有提到过printf
的第一个参数必须是字符串。
既然如此,我们考虑是否能用printf
函数的占位符来给字符占位呢?
之前我们已经了解了,整数int类型占位符为%d
,浮点double类型占位符为%f
。
字符类型的占位符为 %c。
#include <stdio.h>
int main()
{
printf("%c%c%c%c%c%c%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd', '\n');
return 0;
}
2. 探究字符类型占用空间
我们可以用sizeof
来探究一下,字符类型在计算机内部所占用的空间大小。
2.1 字符常量的大小
#include <stdio.h>
int main()
{
printf("sizeof a= %d\n", sizeof('a'));
printf("sizeof b= %d\n", sizeof('b'));
printf("sizeof c= %d\n", sizeof('c'));
printf("sizeof d= %d\n", sizeof('d'));
printf("sizeof e= %d\n", sizeof('e'));
return 0;
}
字符类型常量在C编译器将字符常量看做整型,因此占用4个字节。而在C++编译器中只占1个字节。
在Visual Studio中,如果你使用后缀名c为后缀名,将使用C编译器。而使用cpp为后缀名,将使用C++编译器。
2.2 字符变量的大小
#include <stdio.h>
int main()
{
char c = 'A';
printf("sizeof char= %d\n", sizeof(char));
printf("sizeof c= %d\n", sizeof(c));
return 0;
}
而字符类型的变量仅占用1个字节。