2-4. 字符常量与字符变量

  • 学习人数 30K+
  • 适合所有人群学习
avatar
林耿亮

你好编程主讲老师

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编译器将字符常量看做整型,因此占用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个字节。