const与指针

1、有两种不同的方式将const关键字用于指针,第一种是让指针指向一个敞亮对象,这样可以防止使用该指针来修改所指向的值。第二种是将指针本身声明为常量,这样可以防止改变指针指向的位置。看细节:

声明一个指向常量的指针pt,

int age =39 ;

const int * pt= &age ;

该声明表示,pt指向一个const int (这里为39),因此不能用pt来修改这个值,换句话来说, *pt的值为const,不能被修改。这里容易出错的地方在于,pt的声明并不意味着它指向的值实际上就是一个常量,而只是意味着对于pt来说,这个值是常量。例如,pt指向 age,而 age 不是const,可以直接通过age变量来修改age的值,但是不能用pt指针来修改:

*pt=20;//不合法,因为pt指向const常量

age=20; //合法,因为age不是const常量;

2、如果数据类型本身并不是指针,则可以将const数据或者非const数据的地址赋给指向const的指针,但是只能将非const数据的地址赋给非const指针。

3、     const float g=9.8;

  const float *p=&g;  // 合法


  const float gm=1.63;

  float *p1=&gm;  // 不合法

C++禁止将const的地址赋给非const指针;如果非要强制赋值,则可以用强制类型转换来突破这种限制;但是对于将指针指向指针的情况,涉及的是一级间接关系,则将非const指针赋给const指针是可以的。

int age=33;    int   *pd=&age;   const int *pt=pd;    是合法的;

4、假设有一个const数据组成的数组:

const int mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};

则禁止将常量数组的地址赋给非常量指针,将意味着不能将数组名作为参数传递给使用非常量形参的函数;

int j = sum(mon,12);不合法;

5、在条件允许时,尽可能使用const,将指针参数声明为指向常量数据的指针有两条理由:

a:可以避免由于无意间 修改数据而导致的错误;

b:使用const使函数能够处理const和非const实参,否则将只能接受非const数据;

所以,条件允许,将指针形参声明为指向const的指针;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值