字面值常量#
字面值 常量用于表示不同类型的值。例如,7
表示整形值“七”,"早餐"
表示字符串值 “早餐”,true
表示布尔值“真”。
整数字面值常量#
整数字面值常量:十进制、八进制、十六进制、二进制。
十进制数字就是我们常用的:0、1、2、3、4、5、6、7、8 和 9。
八进制数字,需以
0
作为开头,仅仅包含数字:0、1、2、3、4、5、6 和 7。示例:
00
0
07
7
010 // 0 * 8^2 + 1 * 8^1 + 0
8
011 // 0 * 8^2 + 1 * 8^1 + 1
9
-011
-9
十六进制数字,需以
0x
或者0X
作为开头,仅仅包含数字:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、A、B、C、D、E 和 F。示例:
0x0
0
0x9
9
0xa
10
0XA
10
0xf
15
0x010 // 0 * 16^2 + 1 * 16 + 0
16
-0x010
-16
二进制数字,需以
0b
或者0B
作为开头(C++14 新特性),仅仅包含数字:0 和 1。示例:
0b1
1
0b111 // 1 * 2^2 + 1 * 2^1 + 1
7
-0b111
-7
后缀
u
或者U
表示无符号整数,而后缀l
或者L
表示长整型,例如:
10u
10
-5u
4294967291
-1u
4294967295
5L
5
-5L
-5
浮点字面值常量#
浮点字面值常量包含一个小数点 .
,一个指数(如 e5
),或者通过后缀 d
或者 f
指明是浮点值。
123.
123.00000
123.00
123.00000
123.3f
123.300f
1.23f
1.23000f
0.123
0.12300000
1.23e3
1230.0000
1.23e-3
0.0012300000
true
true
false
false
字符字面值常量#
字符字面值是指用单引号 ''
包裹起来的字符。如:
'a'
'a'
'@'
'@'
'\n'
'\n'
字符串字面值常量#
字符串字面值常量是使用双引号包裹的字符序列。比如:
"中国"
"中国"
字符串字面值可以通过空格拼接:
"你好" "书籍" "!"
"你好书籍!"
指针字面值常量#
指针字面值常量只有一个:空指针 nullptr
。
任何值为 0
的常量表达式都可以当作空指针使用,例如:
int *p = nullptr;
p
@0x7ffcf4bcefb8
int *p1 = 0; // 正确:空指针
p1
@0x7ffcf4bcefb8
int *p2 = 2 - 2; // 正确:空指针
input_line_81:2:7: error: cannot initialize a variable of type 'int *' with an rvalue of type 'int'
int *p2 = 2 - 2; // 正确:空指针
^ ~~~~~
Interpreter Error:
int *p3 = 1 // 错误:1 是一个 int,不是指针
input_line_82:2:7: error: cannot initialize a variable of type 'int *' with an rvalue of type 'int'
int *p3 = 1 // 错误:1 是一个 int,不是指针
^ ~
Interpreter Error:
int z = 0;
int *p4 = z; // 错误:z 不是一个常量
input_line_83:3:6: error: cannot initialize a variable of type 'int *' with an lvalue of type 'int'
int *p4 = z; // 错误:z 不是一个常量
^ ~
Interpreter Error:
在 C++ 中(但 C 中不是,因此要小心 C 头文件),NULL
被定义为 0
,因此,可以:
int *p4 = NULL;
p4
@0x7ffcf4bcefb8