C++ 指针使用const限定符以及指针读法

在C++中为什么要用const对象的指针

其实在教材中也说了,使用const限定符可以强制改变访问的权限。

const指针表示指针本身是一个常量。由于指针是对象,因此就像其他对象一样,允许把指针本身定为常量。cosnt指针必须初始化,并且一旦初始化,const指针的值就不能改变了。const指针的值到底是什么?其实就是存放在指针中的地址,这个地址是一个对象的地址。

如果指针指向const对象,则不允许用指针来改变其所指的const值。为了保证这个特性,c++语言强制要求指向const对象的指针也必须有const特性。

#include <iostream>

#include <cstring>

using namespace std;



int main()

{

    double c = 11.0;

    const double d = 12.0;

    const double e = 13.0;

    const double *cptr;  // 指向const对象的指针

    cptr = &c;  // 正确,指向const对象的指针可以指向非const对象

    cptr = &d;  // 正确,可以指向const对象

    cptr = &e;  // 正确,指针可以指向别的const对象

    *cptr = 13.0;  //错误,不能修改

}

在上文中说了const特性这个词,那么什么是const特性?

const的特性:

  1. 不存在变量提升现象。
  2. 暂时性死区。
  3. 不可重复声明。
  4. 声明的是只读常量,声明时必须初始化。
  5. 本质保存的是内存地址,简单类型数据的值就保存在这个地址中,复合类型数据在这个地址中保存的是一个指针,这个指针指向的对象可以改变,单指针不可改变。

 

const作用:

用于指针的两种情况,const是一个左结合的类型修饰符

2.限定函数的传递值参数

3.限定函数返回值

4.限定函数类型

 

在C++限定符中有左值和右值,可以说是一个表达式,表达式左边式左分量,也称左值,可以作为左操作数。也可以作为右操作数

 

指向常量的指针和常量指针

const double pi = 3.14; // pi是一个常量,不能改变它的值

const double *cptr = &pi; //cptr指向pi,注意这里的const不能丢,因为普通指针不能指向常量

*cptr = 3.33;  //错误,试图改变所指对象的值。不能给*cptr赋值,即不能改变指针所指对象的值

cout << cptr << endl;//输出cptr的值

//虽然不能改变其所指对象的值,但是它可以指向别的常量对象
//这样的话 指针的值(也就是存放在指针中的那个地址)也会改变 比如:
cosnt double pi2 = 6.28;

cptr = &pi2; //正确  *cptr为6.28

cout << cptr << endl; //cptr的值变了

 

怎样区分C++ const指针式指向常量的指针还是const指针呢?

从右往左读,遇到p就替换为“p is a”,遇到*就替换为“point to”,其余不变。下面我们来一个一个看:

1. const int p; // p is a int const. p是一个int型常量 这个很简单

2. const int *p; //p is a point to int const. p是一个指针,指向int型常量。即p是一个指向int型常量的指针。

3. int const* p; //与2相同 const int 和 int const 是一样的意思。《C++ primer》中采用第一种写法。

4. int * const p; // p is a const point to int. p是一个指向int的const指针

5. const int * const p; //p is a const point to int const. p是一个指向int型常量的const指针。

6. int const * const p; //同5

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值