提示:在程序设计中,常量是一个至关重要的概念。
目录
前言
4.1 基本介绍
4.2 经常使用的常量
4.2.1整数常量
4.2.2浮点常量
4.2.3字符常量
4.2.4字符串常量
4.2.5案例演示
4.3 常量的定义
4.3.1定义常量的两种方式
4.4 #define 预处理器
4.5 const 关键字
4.6 const 和 #define 的区别
总结
附录
前言
在程序设计中,常量是一个至关重要的概念。它们代表固定不变的值,能够提高代码的可读性、可维护性和安全性。常量的使用不仅可以避免魔法数字(magic numbers)的出现,还可以确保程序在执行过程中不会意外修改某些关键值。本节将深入探讨常量的类型及其定义方式,包括整数常量、浮点常量、字符常量和字符串常量,以及如何通过 #define
预处理器和 const
关键字来定义常量。掌握这些基本概念将为后续的编程学习和实践打下坚实的基础。
4.1 基本介绍
1) 常量是固定值,在程序执行期间不能改变。这些固定的值,又叫做字面量。
2) 常量可以是任何的基本数据类型,比如整数常量、浮点常量、字符常量,或字符串字面值,也有枚举常量。
3) 常量的值在定义后不能进行修改。
4.2 经常使用的常量
4.2.1整数常量
1) 整数常量可以是十进制、八进制或十六进制的常量。前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制。整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意
2) 整数常量举例说明
|
4.2.2浮点常量
1) 浮点常量由整数部分、小数点、小数部分和指数部分组成。您可以使用小数形式或者指数形式来表示浮点常量。
2) 浮点常量举例说明
|
4.2.3字符常量
1) 字符常量是括在单引号中,例如,'x' 可以存储在 char 类型的变量中。字符常量可以是一个普通的字符(例如'x')、一个转义序列(例如 '\t')。
2) 字符常量举例说明
|
4.2.4字符串常量
1) 字符串字面值或常量是括在双引号 "" 中的。一个字符串包含类似于字符常量的字符:普通的字符、转义序列和通用的字符。可以使用空格做分隔符,把一个很长的字符串常量进行分行
2) 字符串常量举例说明
|
4.2.5案例演示
#include <>
void main() {
int n1 = 0213; /* 八进制 */ //对应 10 进制 139
int n2 = 0X4b; /* 十六进制 */ // 对应 10 进制 75
char c1 = 'a';
char c2 = '\t'; // '\t' 是字符常量
char str1[20] = "北京 hello"; // "北京 hello" 字符串常量
char str2[100] = "hello \
world"; // 等价 "hello world"
//验证
printf("\nn1=%d n2=%d", n1, n2);
printf("\nstr1=%s str2=%s", str1, str2);
getchar();
}
4.3 常量的定义
4.3.1定义常量的两种方式
1) 使用 #define 预处理器。
2) 使用 const 关键字
4.4 #define 预处理器
1) #define 预处理器定义常量的形式
|
2) 案例演示
#include <>
#define PI 3.14 //定义常量 PI 常量值 3.14
int main() {
//PI = 3.1415 可以吗?=》 不可以修改,因为 PI 是常量
//可以修改 PI 值?
//PI = 3.1415; //提示 = 左值 必须是可修改的值
double area;
double r = 1.2;//半径
area = PI * r * r;
printf("面积 : %.2f", area);
getchar();
return 0;
}
4.5 const 关键字
1) 可以使用 const 声明指定类型的常量
|
2) 案例演示
#include <>
//说明
//1. const 是一个关键字,规定好,表示后面定义了一个常量
//2. PI 是常量名,即是一个常量,常量值就是 3.14
//3. PI 因为是常量,因此不可以修改
//4. const 定义常量时,需要加 分号
const double PI = 3.14;
int main() {
//PI = 3.1415 可以吗? => 不可以
double area;
double r = 1.2;
area = PI * r * r;
printf("面积 : %.2f", area);
getchar();
return 0;
}
4.6 const 和 #define 的区别
1) const 定义的常量时,带类型,define 不带类型
2) const 是在 编译、运行的时候起作用,而 define 是在编译的预处理阶段起作用
3) define 只是简单的替换,没有类型检查。简单的字符串替换会导致边界效应[案例演示].
4) const 常量可以进行调试的,define 是不能进行调试的,主要是预编译阶段就已经替换掉了,调试的时候就没它了
5) const 不能重定义,不可以定义两个一样的,而 define 通过 undef 取消某个符号的定义,再重新定义 [案例]
6) define 可以配合#ifdef、 #ifndef、 #endif 来使用, 可以让代码更加灵活,比如我们可以通过#define 来 启动或者关闭 调试信息。[案例]
7) 注意事项的举例说明
#include <>
#define A 1
#define B (A+3) //
#define C A/B*3 //
//const 不能重定义,不可以定义两个一样的,而 define 通过 undef 取消某个符号的定义,再重新定义
const double PI=3.14;
//const double PI=3.145;
#define PI2 3.14
#undef PI2 // 取消 PI2 的定义
#define PI2 3.145
void main() {
//
//分析过程
//#define 就是一个简单的替换!!!
//C 其实是 A/A+3*3 = 1/1 + 3 * 3 = 1 + 9 = 10
//C 其实是 A/(A+3)*3 = 1/(1+3) * 3 = 1/4 *3 = ?
double d1 = 1.0/4 *3 ; // 0.25 * 3 = 0.75
printf("\nc=%.2f", C);// 问 c = ?
printf("\nd1=%.2f", d1);
getchar();
}
//第二个案例, 说明 const 和 define 区别
#include <>
//#define DEBUG
void main() {
#ifdef DEBUG //如果定义过 DEBUF
printf("ok, 调试信息");
#endif
#ifndef DEBUG //如果没有定义过 DEBUF
printf("hello, 另外的信息");
#endif
getchar();
}
总结
本节内容详细介绍了常量的基本概念及其分类,包括整数常量、浮点常量、字符常量和字符串常量。通过示例代码,我们展示了常量的实际应用,并说明了如何使用 #define
预处理器和 const
关键字来定义常量。我们还比较了这两种定义方式的优缺点,包括类型检查、作用域以及重定义的限制。在实际编程中,合理使用常量可以使代码更加清晰、易于维护,同时减少潜在的错误。因此,掌握常量的使用,不论是在简单的程序还是复杂的系统中,都是至关重要的。
附录
参考:【尚硅谷C语言零基础快速入门教程-哔哩哔哩】 /vS3vTDp