将常量或非常量数据的地址赋给指向常量的指针是合法的:
double rates[3]={88.99,100.12,340.5};
const double locked[4]={0.08,0.075,0.0725,0.07};
const double *pc=rates; //合法
pc=locked; //合法
pc=&rates[3]; //合法
然而,只有非常量数据的地址才可以赋给普通的指针:
double rates[3]={88.99,100.12,340.5};
const double locked[4]={0.08,0.075,0.0725,0.07};
double *pc=rates; //合法
pc=locked; //非法
pc=&rates[3]; //合法
这样的规则是合理的。否则,就可以使用指针来修改被认为是常量的数据。
在函数参量定义中使用const,不仅可以保护数据,而且使函数可以使用声明为const的数组。
const还有很多用法。例如:可以使用关键字const来声明并初始化指针,以保证指针不会指向别处,关键在于const的位置:
double rates[3]={88.99,100.12,340.5};
double * const pc=rates; //pc指向数组的开始处
pc=&rates[2]; //不允许
*pc=92.99 //可以,更改rates[0]的值
这样的指针仍然可以用于修改数据,但它只能指向最初赋给它的地址。
最后,可以使用两个const来创建指针,这个指针即不可以更改所指向的地址,也不可以修改所指向的数据:
double rates[3]={88.99,100.12,340.5};
const double * const pc=rates;
pc=&rates[2]; //不允许
*pc=92.99 //不允许