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 ------