浅谈C++ 之 const与指针关系

        以前在找工作面试和笔试过程中,只要是考C++的,一般都会问到const之类的问题,主要是const与指针的关系。最近在看c++ primer 第四版。特此做个总结。若有不足之处,望读者指出和谅解。


1. const char *p  (指向const对象的指针)

const char *p:表示指针p是一个指向字符常量的指针。可以从表达“ const char *p”的右边向左边去读:首先char *p代表p是一个字符指针,接下来const表示p所指向的内容是常量。 p所指向的字符是一个常量,该常量不能被修改。也就是说,不能通过p去修改它所指向的内容。但是p本身只是一个地址值,该值是可以修改的。具体参见下面几个实例。
1.const char *p;    //正确,p是一个指向字符常量的指针,未初始化

2.const int a=4;    
   const int *pa=&a;  //正确,p是一个指向int型常量的指针,已经初始化

3.const int b=4;
   int *pb=&b;  / /错误,指针pb必须也要被const修饰,才能指向常量b

4.const int c=4;
   const void * pc1=&c;  //正确
   void *pc2=&c;  // 错误,pc2必须也要被const所修饰

5.int d=4;
   const int * pd=&d;  // 正确,即使被const修饰的指针也能够指向非const对象,不能通过指针pd去修改d的值
这个在很多函数的形参保护中得以体现,比如函数
char *strcpy(char *destination, const char *source);
这样无论传给strcpy的参数source是否为字符串常量。都不能在strcpy内部修改source,这样就起到了保护source的作用
 double dval = 3.14;
 dval = 3.14159; 
 *cptr = 3.14159;  // 编译错误,cptr是一个指向常量double的指针

2.char *const p (const指针)

char *const p:从右向左读,* const p表示p是一个常量且是一个指针,最好char 表示p这个指针指向一个字符,即为一个指向字符的常量指针。 p本身是一个常量,不能被修改,且需要在声明时被初始化,但是p所指向的内容可以被修改。
1. int a=1; 
    int *const pa = &a;  //正确

2. int *const p;  // 错误,p是常量需要在声明时被初始化

3.const double pi = 3.14159;
   const double *const pi_ptr = π  //正确,pi是常量不能被修改,并且 pi_ptr也是常量指针,也不能被修改
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值