可以在程序中写下 1、1.0、3.14159 这样的数值,这类数值称之为字面常量(Literal constant),程序中若写下一个整数值,例如 1 这个数值的话,默认是个int
类型,若在程序中写下 1.0,3.14 等,默认会是double
类型的数值,例如下面这个程序显示出来的分别是int
与double
的大小:
#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。
可以在整数值之后加上L
或l
,表示该整数值要是long
类型,因为l
容易与数字1
搞混,因此常使用L
,例如1L
,也可以指定为无符号整数,可使用U
或u
来指定,例如1U
,L
与U
可以同时指定,例如1UL
或1LU
。
对于浮点数的话,则可以在写下浮点数值时以F
或f
表示数值要使用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"..."
等字面常量,这就等到之后谈到字符串时一并说明。