第三章:const修饰符

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=π//注意它的写法。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值