非指针const:
① const TYPE 常量标志符=常量表达式;
② TYPE const 常量标志符=常量表达式; 常量表达式可以是常数,或者不带函数调用的简单表达式,因为系统在编译阶段对标识常量求值,所以不能调用函数。因为常量在定义后就不可以修改了,所以必须在定义的时候初始化。
③ 对于一个非指针的类型TYPE无论怎么写,都是一个含义即常量标识符的值不可变。
指针const:
对于指针类型有以下3类:
1、指向常量的指针:const 类型*指针OR 类型const*指针此处const在关联类型之前或者紧跟关联类型后面,表示约束所指对象访问。指向常量的指针可以获取变量或者常量的地 址,但是限制用指针间址访问对象的方式为“只读”。例如:int var=23; const int MAX=100;int *p; const int *P1_const; int const *P2_const;P1_const=&var;(对) P2_const=&MAX;(对)*P1_const=100;(错) *P2_const=100;(错) C++为了保证标识常量的只读性,规定常量的地址只能赋给指向常量的指针。如:p=&MAX是错误的。
2、指针常量:类型*const 指针,指针常量只能在定义的时候初始化,定义后不可以修改,即不能改变指针的指向,但不影响所指对象的访问。例如:int var1=100,var2=200;
int*const const_p1=&var1; const_p1=&var2;(错) *const_p1=var2(对)再如:const intMAX=1000; int* const const_p2=&MAX(错) 因为标志常量只能赋给指向常量的指针,另一 方面const_p2是一个指针常量,也就是一旦她被初始化就不再可以指向其他东西,但是可以通过间址访问。
3、指向常量的指针常量:const 类型*const 指针OR 类型 const*const 指针其含义为指针本身和所指对象的值在定义后都限制为只读,不可以写。例如:int var1=100, var2=300;
const int MAX=1000; const int *const p1=&var1;(对) int const *const p2=&MAX;(对) p1=&va2; (错) (不可以写指针变量) *p2=600; (错) (不可以写指向指针的常量) var1=var2; (对) (不影响读写)