1.一个常量一旦被定义了,我们就不能改变它。比如 const double pi=3.14.那么接下来任何试图改变pi的语句都将被视为违法的。
2.那么这样的操作可以吗?把一个常量的地址赋给一个指针呢?如:
const double minWage=9.60;
double *ptr+=1.40;
不行。这又是违法的。任何一个试图将一个非const对象的指针指向一个常量对象的动作都将引起编译错误。
3.这并不意味着我们不能间接地指向一个const对象,我们只需声明一个指向常量的指针来做这样的事。比如:
const double minWage=9.60;
const double *pc=0;//PC 是一个指向常量的指针,注意写法,const在前门
pc=&minWage;//让pc指向minWage的地址。
doubledval=3.14;
pc=&dval;//这也是可以的,让pc指向另一个地址,虽然dval不是一个常量。
dval=3.14159;//这也是正确的,因为dval本来就不是常量
*pc=3.14159;这就是错了,因为我们在定义pc的时候定义它为指向常量的地址,所以它无法改变它所指向的对象。
通过上述例子,我们可以进行如下的一些总结:
const对象的地址只能赋给指向const对象的指针,但是指向const对象的指针可以被赋以一个非const对象的地址。
不要试图通过一个指向const对象的指针来间接改变它所指对象的值,这会引发错误。
4.在实际的程序中,指向const的指针常被用来作为函数的形式参数。它作为一个约束来保证,被传递给函数的实际对象在函数中不会被修改。例如:
int strcmp(const char*str1,const char*str2);
5.上述讲了一个指向const对象的指针,他的写法是const int*p的形式。下面来说说const指针。它的写法是 int *const p;
const指针可以指向一个const或者一个非const对象。如:int errNumb=0; int* const curErr=&errNumb;
这意味着,我们不能再把其他地址值赋给curErr,但是我们却可以修改curErr所指向的值。
例如:我们可以这样操作:*curErr=2;
但是我们不能这样操作:int num2=8;curErr=&num2;
6.最后一种指针被称为指向const对象的const指针,它是上面两种指针的结合。它的值(也就是地址)和它所指向的对象的值都不能发生改变。
如:const double pi=3.14159;const double *const pi_ptr=π//注意它的写法。