const对象:
const对象声明时必须赋初值,该值在编译阶段确定,不可在程序中修改。
const修饰符既可放在类型名前也可放在类型名后,通常放在类型名前。不过放在类型名后易于理解。
const int a = 7;
int b = 8;
int array[a];//合法, a是const变量,值在编译阶段确认
int arr[b]; //不合法,b是个普通变量,值没有在编译阶段确定
指向const对象的指针:
可理解为“自认为指向const对象的指针”,其实际所指向的对象不一定是const对象
不能通过指向const对象的指针修改其指向的对象的值,即使该对象为非const对象。
指针本身可以赋其他值,由于指针本身并不是const对象,因此在初始化时不必赋初值,如 const int *a; //合法声明
指向const对象的指针通常作为函数的形参,防止在函数内部更改该指针指向的对象。
const int a = 7;
int b = 8;
const int *cptr;
cptr = &b; //不可通过cptr指针修改b的值,但可以直接对b赋值来修改b的值
const指针:
指针本身为const,此种类型指针为普通const变量,声明时必须赋初值。其值不可被修改。
例:int a = 7;
int* const ptr = &a;
typedef的情况
typedef int* IntPtr; //IntPtr为int指针类型
int a = 8;
const InPtr ptr = &a; //ptr为const指针,不是指向const对象的指针,必须赋初值,可参考const int b = 8;