- const与非const之间,相互赋值时,如果使用不当,可能造成一些问题。
非指针类型
const int c_A = 10;
int b = 20;
b = c_A ;
c_A = b;
- 关于这个问题,网上有说”非const变量赋给const变量,是非法的“。请不要陷入这种容易混乱的逻辑。
- 上述情况,比较正确的解释。const int 在初始化之后,是不能再改变的。且const int 必须在声明时就赋值。
const int c_A;
c_A = 10;
指针类型
const int* c_PtrA = new int(10);
int * ptrB= new int(10);
c_PtrA = ptrB;
ptrB = c_PtrA;
ptrB = (int*)c_PtrA;
*ptrB = 20;
- const int * 表示,指向常量int 类型的指针,即指向的这块内存的内容,不可以修改。(但指针本身可以修改)。
- int * 表示,指向非常量int类型的指针,指针这块内存的内容可修改,指针本身可修改。
- const int* 已经限制此地址内容,不可修改。这时,却让 int * 指针指向这块地址,而使用 int * 指针,表示此地址内容可修改。那么到底可不可以改?
- 接上,因此逻辑冲突,编译器报错。
const int * c_A;
c_A = someAddress;
- 因此,对于非指针类型的const,可以理解为使用"const”,就是常量了。什么是常量?10,20,"linduo"等都是常量。 int a、char s等都是变量。
- 对于指针类型,当然有常量指针和指针常量的区别。可以理解为,使用"const",是用来限制,指针本身或指针指向内容,可不可以修改。