const修饰变量
const与普通变量
const修饰普通变量(定义 常变量/常量),必须在声明(定义)的同时进行初始化,因为通过const定义的普通常变量,在定义之后不能(无法)修改其值。
格式:(1)const 数据类型 变量名 = 值;
(2)数据类型 const 变/常量名 = 值;
以上两种格式在功能(效果、作用)上没有区别,但通常使用格式(1)。
// 以下是正确的
const int a = 10;
const char c;
// 以下是错误的
const int b;
const float f;
const与指针变量
格式:(1)const 数据类型 *变量名;
(2)数据类型 * const 变量名 = 地址;
// 关于格式(1)
char ch = 'a';
char ch2 = 's';
const char *p1 = &ch; // *p1为常量,指针p1为变量;p1可以不初始化
p1 = &ch2; // 操作正确:p1为变量,可以修改p1的值,使指针变量指向别的地址
*p1 = 'r'; // 操作错误:*p1为常量,不能通过指针修改所指向的空间中的值(保存的数据)
// 关于格式(2)
int n = 5;
int m = -6;
int * const p2 = &n; // *p2为变量,指针p2为常量;必须在定义指针p2的同时进行初始化
*p2 = 20; // 正确,,*p2是变量、n也是变量,可以通过*p2修改整型变量n的值
p2 = &m; // 错误,,指针p2为常量,不能修改其指向的地址
------ 2023-6-11 星期日 10:06:31 ------
const与#define
const定义的常量有类型,#define定义的常量(宏定义)没有类型,编译可以对const常量进行类型安全检查,
而#define常量仅仅是做简单替换。
const定义的常量在编译时分配内存,而#define定义的常量是在预编译时进行替换,不分配内存。
作用域不同,const定义的常变量的作用域和该变量的作用范围相同。
#define定义的常量其作用域为定义点到程序结束,可以在某个地方使用#undef取消
定义常量还可以使用enum,尽量使用const、enum替换#define来定义常量。
#define定义的常量,容易产生副作用。
高层次编程,尽可能使用const、enum、inline代替#define。
底层编程,#define是很灵活的。
------ 2023-6-11 星期日 10:52:00 ------