const double *pc = 0;
const double minWage = 9.60;
// ok: 不能通过pc 修改minWage
pc = &minWage;
double dval = 3.14;
// ok: 不能通过pc 修改dval
// 虽然dval 本身不是一个常量
pc = &dval; // ok
dval = 3.14159; // ok
*pc = 3.14159; // 错误
const 对象的地址只能赋值给指向const 对象的指针例如pc 但是指向const 对象的
指针可以被赋以一个非const 对象的地址例如
pc = &dval;
虽然dval 不是常量但试图通过pc 修改它的值仍会导致编译错误因为在运行程序
的任意一点上编译器不能确定指针所指的实际对象
在实际的程序中指向const 的指针常被用作函数的形式参数它作为一个约定来保证
被传递给函数的实际对象在函数中不会被修改例如
// 在实际的程序中, 指向常量的指针
// 往往被用作函数参数
int strcmp( const char *str1, const char *str2 );
在第7 章关于函数的讨论中我们会更多地讨论指向const 对象的指针
我们可以定义一个const 指针指向一个const 或一个非const 对象例如
int errNumb = 0;
int *const curErr = &errNumb;
curErr 是指向一个非const 对象的const 指针我们可以从右拄左把定义读作curErr是一个指向int 类型对象的const 指针这意味着不能赋给curErr 其他的地址值但可以修改curErr 指向的值
下面的代码说明我们可以怎样使用curErr
do_something();
if ( *curErr ) {
errorHandler();
*curErr = 0; // ok: 重置指针所指的对象
}
试图给const 指针赋值会在编译时刻被标记为错误
curErr = &myErrNumb; // 错误
指向const 对象的const 指针的定义就是将前面两种定义结合起来例如
const double pi = 3.14159;
const double *const pi_ptr = π
在这种情况下pi_ptr 指向的对象的值以及它的地址本身都不能被改变
const 语法
最新推荐文章于 2025-06-13 15:32:06 发布