const 类型限定修饰符把一个对象转换成一个常量,常量定义以后在程序中任何改变这个值的企图都将导致编译错误。
请注意下面的代码:
const double minWage = 9.60;
double *ptr = &minWage;
一般编译器不能跟踪指针在程序中任意一点指向的对象,但任何“试图将一个非const 对象的指针指向一个常量对象”的动作都将引起编译错误或警告。
另外,这里给出三种和const相关的指针,看起来类似,容易犯晕:
(1)const int *pc;
pc是指向被定义成const的int类型对象的指针。pc本身不是常量,可以重新赋值,使其指向不同的对象,但不能修改pc指向的对象,如:
const int *pc = 0;
const int min = 100;
pc = &min; //OK
int temp = 20;
pc = &temp; //OK
*pc = 50; //Error
(2)int *const pc;
pc是指向int类型对象的const指针。这意味着不能赋给pc其他的地址值,但可以修改pc指向的值。
int min = 100;
int temp = 20;
int *const pc =&min
*pc = 50; //OK
pc = &temp; //Error
(3)const int *const pc;
pc是一个指向被定义为const的int类型对象的const指针,这样即不能赋给pc其他的地址值,也不能修改pc指向的对象。