2.6 常量和字面量
直接写在源代码中的值也有类型。值的写法决定了它的类型,进而影响所在表达式的计算方式。
本节的主体示例适用于 C11、C17 和 C23。
1. 示例
先运行下面的程序:
c
#include <stdio.h>
int main(void) {
double first = 1 / 2;
double second = 1.0 / 2.0;
printf("%.1f\n", first);
printf("%.1f\n", second);
return 0;
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
输出为:
bash
0.0 0.5
第一行输出不是 0.5。1 和 2 是整数常量,因此 1 / 2 先进行整数除法,结果为 0,随后才用这个结果初始化 double 对象。1.0 和 2.0 则是 double 类型的浮点常量,所以 1.0 / 2.0 的结果是 0.5。
两个初始化式只在值的写法上不同。源码中的值不仅有数值或文本内容,还有类型。
2. 四种常见写法
观察下面四个记号:
c
1
1.0
'1'
"1"1
2
3
4
2
3
4
它们分别表示整数、浮点数、字符和字符串,不能互相替换。在日常教学中,这些直接写进源码的形式常被统称为“字面量”。严格按照 ISO C 的词法分类,1、1.0、'1' 分别是整数常量、浮点常量和字符常量,"1" 是字符串字面量。
阅读后续各节时,对每个记号都应弄清两点:
- 它表示数、字符,还是一段文本;
- 它具有什么类型,这一类型会怎样影响所在的表达式。
3. 按顺序学习
先阅读 2.7 true / false,了解 C 怎样表示逻辑上的真与假。
接着阅读 2.8 整数常量、浮点常量和字符常量,学习数值的进制、后缀、类型以及字符常量。
最后阅读 9.1 字符串字面量,弄清单个字符与一段文本为什么是两种不同的写法。
4. 习题
#10201
⚡3⏳2
判断下面每个记号属于整数常量、浮点常量、字符常量还是字符串字面量,并写出它的类型:
123123u3.14'A'"A"
#10202
⚡5⏳3
写一段代码,分别演示:
- 字符常量与字符串字面量的区别;
1 / 2与1.0 / 2.0的结果区别。
说明每个结果产生的原因,不要编写修改字符串字面量的代码。