const 语法

来源:互联网 发布:楼梯做法计算法 编辑:程序博客网 时间:2024/06/12 01:02
const double *pc = 0;const double minWage = 9.60;// ok: 不能通过pc 修改minWagepc = &minWage;double dval = 3.14;// ok: 不能通过pc 修改dval// 虽然dval 本身不是一个常量pc = &dval; // okdval = 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 指向的值下面的代码说明我们可以怎样使用curErrdo_something();if ( *curErr ) {errorHandler();*curErr = 0; // ok: 重置指针所指的对象}试图给const 指针赋值会在编译时刻被标记为错误curErr = &myErrNumb; // 错误指向const 对象的const 指针的定义就是将前面两种定义结合起来例如const double pi = 3.14159;const double *const pi_ptr = π在这种情况下pi_ptr 指向的对象的值以及它的地址本身都不能被改变