字面常量


可以在程序中写下 1、1.0、3.14159 这样的数值,这类数值称之为字面常量(Literal constant),程序中若写下一个整数值,例如 1 这个数值的话,默认是个int类型,若在程序中写下 1.0,3.14 等,默认会是double类型的数值,例如下面这个程序显示出来的分别是intdouble的大小:

#include <stdio.h>

int main(void) {
    printf("sizeof(1):\t %lu\n", sizeof(1));
    printf("sizeof(1.0):\t %lu\n", sizeof(1.0));

    return 0;
}

执行结果:

sizeof(1):      4
sizeof(1.0):    8

整数字面常量可以用 8 进制、10 进制与 16 进制表示,一般习惯使用 10 进制,如果要使用 8 进制的字面常量,开头加上0就可以了,如果要使用 16 进制的字面常量,开头加上0x

例如下面的程序各显示 10 进制 26 的 8 进制与 16 进制写法:

#include <stdio.h>

int main(void) {
    printf("%d\n", 26);
    printf("%d\n", 032);
    printf("%d\n", 0x1A);

    return 0;
}

由于printf指定格式控制字符%d输出整数时,都会以 10 进制显示,所以上面的程序中三行陈述都会显示 26。

可以在整数值之后加上Ll,表示该整数值要是long类型,因为l容易与数字1搞混,因此常使用L,例如1L,也可以指定为无符号整数,可使用Uu来指定,例如1ULU可以同时指定,例如1UL1LU

对于浮点数的话,则可以在写下浮点数值时以Ff表示数值要使用float类型,例如3.14f,也可以使用科学计数,例如 20000 可以表示为2e4

字符字面常量是以单引号来包括一个字符,例如'A''1'都表示一个字符字面常量,而有一些字符与C中所使用的相同,例如 “、'、\ 等,要在程序中 表现这些字符则要使用转义序列(escape sequence),即\"\'\\,其他还有一些不可见字符,也要以转义序列来表示,下表列出常用的转义序列:

  • \n:换行、新行(newline)
  • \t:水平定位点(horizontal tab)
  • \v:垂直定位点(vertical tab)
  • \b:退回一格(backspace)
  • \r:返回(carriage return)
  • \f:换页(formfeed)
  • \a:哔声(alert bell)
  • \\:倒斜线(backslash)
  • \?:问号
  • \':单引号
  • \": 双引号
  • \nnn:nnn 为一到三个 8 进制数字,表示字符编码,例如 \115
  • \xnn.:nn 为多个 16 进制数字,表示字符编码,通常用两个数字,例如 \xb4\xfa,
  • \unnnn:Unicode 码 U+nnnn 表示(C99)
  • \Unnnnnnnn:Unicode 码 U+nnnnnnnn 表示(C99)

八进制 ASCII 码如'\062'则是字符'2',十六进制 ASCII 码如"\x48"为字符'H',一个输出的例子如下所示,以十六进制 ASCII 码显示"2 个 HELLO"

#include <stdio.h>

int main(void) {
    char c = '\'';
    printf("单引号字符 %c \n", c);
    printf(" \" \062 个 \x48\x45\x4c\x4c\x4f\x21 \" \n");

    return 0;
}

char定义一个字符 变量,而在printf()中要显示该变量时,使用格式指定码(format specifier)%c来指定,执行结果如下:

单引号字符 '
 " 2 个 HELLO! "

更多的格式指定码之使用,将在〈printf 与 scanf〉介绍。

在 C++ 中如果以""来包括一串文本的话,即为字符串字面常数,例如"Hello! World!"就是字符串字面常数,字符串字面常量由char数组组成,多字节字符使用char来存储码元(code unit),每一个字符串最后会以一个 null 字符结束,其他还有L"..."u8"..."u"..."U"..."等字面常量,这就等到之后谈到字符串时一并说明。


展开阅读全文