const(常量)
const允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不变的。如果在编程中确实有某个值保持不变,就应该明确使用const,这样可以获得编译器的帮助。
1、const修饰普通变量
当使用const
修饰普通类型的变量a时,该变量a会被编译器看成常量,而对常量赋值是违的。
const int a = 10;
int b = a; // 正常赋值
a = 20; // 错误,不能给常量赋值
实际上,虽然不能直接对常变量进行修改,但是我们可以通过指针对常变量进行修改:
2.1 const修饰指针指向的内容,则内容为不可变量。
即 const修饰的常量指针:指针本身是一个常量(既*ptr是不可变的),不能修改指向地址所存储的值,可以修改其指向地址(ptr)。
// 理解为: const在int*前,所以
int a = 10, b = 20;
const int* ptr = &a;// 修改指向地址所存储的值是不合法的
*ptr = 20; // 错误,编译器会报错// 修改指向的地址是合法的
ptr = &b; // 合法,可以修改指针指向的地址
2.2 const 修饰指针,指针为不可变量。
即 const修饰的指针常量:指针指向的是一个常量(既ptr是不可变的),能修改指向地址所存储的值,不可以修改其指向地址(ptr)。
int a = 10, b = 20;
int* const ptr = &a;// 修改指向地址所存储的值是合法的
*ptr = 20; // 合法,可以修改指向地址处的值// 修改指针指向的地址是不合法的
ptr = &b; // 错误,编译器会报错