7. 字面值
字面值(Literal) 是直接在代码中表示的固定值(常量),它们的值和类型在编译时就已确定。字面值用于表示常量数据,例如整数、浮点数、字符或字符串等。
常量
常量是指在程序中永远不会改变的量,在整个程序中不允许修改。
在下面的程序中
#include <stdio.h>
int main(int argc, char *argv[]) {
int age; // 声明一个整型变量,初始值不确定。
float price = 0.0; // 声明一个浮点型变量,初始值为0.0
int score1, score2 = 60; // 声明两个整型变量
char gender = 'F'; // 声明一个字符型变量,初始值为'F'(值为70)。
// 字符 'F' 后续讲解。
printf("age: %d, price: %f, score1: %d, score2: %d, gender: %d\n",
age, price, score1, score2, gender
);
return 0;
}
其中的 0.0、60、'F'和 return 后面的 0 都是字面值。
C 语言中的字面值类型有:
- 整数字面值
- 浮点数字面值
- 字符字面值
- 字符串字面值
1. 整数字面值
整数字面值有三种写法,即:十进制写法、八进制写法 和 十六进制写法,如:。
// 十进制写法:
100 -1 0
// 八进制写法,0开头。
0177
// 十六进制写法,以 0x 或 0X 开头,后跟 0-9, A-F或a-f(表示 10 ~ 15)
0x1 0X2 0xa 0xA 0xFF 0XFFFFFFFF
上述写法中,无论是 十进制写法 还是 十六进制写法,在计算机内存存储时都是用整数(int 类型)进行存储的。
在 C 语言中,整数字面值不但有值,而且还有存储这些值的方式方法,即:数据类型。默认整数字面值的数据类型都是整数。如果我们要告诉编译器这个类型不是整数,则需要再整数字面值的后面添加后缀来表示不同的类型。
整数字面值后缀写法如下表所示:
后缀
类型
示例
无后缀
int(默认类型)
1234或 0x1234u 或 Uunsigned(无符号)
1234Ul 或 Llong(长整型)
1234Lll 或 LLlong long(长长整型)
1234LLul 或 ULunsigned long
1234ULull 或 ULLunsigned long long
1234ULLlu 或 LUunsigned long(与 UL 相同)
1234LUllu 或 LLUunsigned long long(与 ULL 相同)
1234LLU2. 浮点数字面值
浮点数字面值有两种写法,即:小数写法、指数写法。如:
// 小数写法:
3.14
// 指数写法:
0.314E1 或 0.314e1 // 表示 0.314 x 10 的 1 次方
浮点数字面值后缀写法如下表所示:
后缀
类型
示例
无后缀
double(默认类型)
3.14f 或 Ffloat
3.14Fl 或 Llong double
3.14L3. 字符字面值
字符型字面值用单引号(')括起来的单个字符。默认返回整数数据类型。如:
// '' 中间放入一个 ascii 字符
'A' // 值为 65(十进制)
' ' // 空格,值为 32(十进制)
'0' // 字符0️,值为 48(十进制)
// 转义序列写法:使用 \ 开头
'\n' // 换行符,值为 10(十进制)(详见ASCII编码表)
'\t' // 制表符,值为 9(十进制)
// 八进制转义序列写法:一个 \ 后跟 1~3个八进制数字
'\0' // 空字符,值为 0 (ASCII 0)
'\12' // 换行符'\n',值为 12(八进制)、10(十进制)
'\101' // 字符 'A',值为101(八进制)、65(十进制)、
// 十六进制转义序列写法:一个 \x 后跟 1~2个十六进制数字
'\x0' // 空字符,值为 0 (ASCII 0)
'\x41' // 字符 'A',值为101(八进制)、65(十进制)、
'\xA' // 换行符,值为 10(十进制)
'\xFF' // 值为 255(十进制),字符型字面值的最大值。
字符型字面值默认返回整数数据类型。
4. 字符串字面值
字符串字面值用英文的双引号(")括起来的字符序列。默认返回 const char const * 类型(后面会讲),如:
"Hello" // 字符串,末尾自动加 '\0',长度为 6 个字节。
"Hello\tWorld\n" // 包含转义字符的字符串。
字符串字面值实际上是
char数组,并以\0(空字符)结尾。
关于字符串的内容后面会讲
总结:
字面值 是 C 语言中直接表示固定值的语法结构,编译器会根据其形式推断数据类型。理解字面值有助于正确使用常量数据。
练习:
下面这些字面值是那种类型的数据。
3.14 3.14f '0' 200 200U 200L
200UL 1LL 6.18E-1 2.71828E0F "hello"