const与指针的那些事

const不但可以设基本数据类型为常量,也可以跟指针产生一点关系。其中const与指针的位置排布不同会产生不同的区别,比如下面的3句你能说出有什么区别吗?

const int * p;//形式1
int const * p;//形式2
int * const p;//形式3

下面让我来一一道来它们的来龙去脉。
一、形式1
我们先来看去掉const的形式代表什么意思,很明显,表示p是一个指向int型变量的指针。

int * p;//p里面保存的是指向int变量的指针

而加上const什么意思呢,到底什么是常量,我们进行如下代码的实验。

int main()
{
    int a=10;
    int b=20;
    const int * p=&a;
    *p=b;//测试1
    p=&b;//测试2
    a=b;//测试3
    cout<<*p<<" "<<a<<endl;
    return 0;
}

编译提示如下的问题:
这里写图片描述
测试1编译不过,说明*p是read-only,*p被常量化,不能更改;测试2和测试3没问题,说明此时指针p可以指向其他任意int变量,a也可以重新赋予其他Int值。
二、形式2
我们也来看看去掉const的形式,很明显,p还是一个指向int型变量的指针。

int * p;//p里面保存的是指向int变量的指针

而加上const什么意思呢,到底什么是常量,我们进行如下代码的实验。

int main()
{
    int a=10;
    int b=20;
    int const * p=&a;
    *p=b;//测试1
    p=&b;//测试2
    a=b;//测试3
    cout<<*p<<" "<<a<<endl;
    return 0;
}

编译出现同样的问题
这里写图片描述

说明形式2和形式1表示同样的意思,*p被常量化,但p可以指向其余int变量。
三、形式3
去掉const,表示的意思和形式1和形式2相同。我们将代码中的定义更改一下。

int main()
{
    int a=10;
    int b=20;
    int * const p=&a;
    *p=b;//测试1
    p=&b;//测试2
    a=b;//测试3
    cout<<*p<<" "<<a<<endl;
    return 0;
}

此时编译提示如下
这里写图片描述
现在的问题和形式1、2的不一样了,测试2没有通过,说明p是一个常指针,不能指向其他int变量,只能指向a。

现在三种形式已经讲解完毕,你是不是可能脑洞大开,会不会下面有这种形式存在

const int * const p;

答案是存在的,表示*p和p都被常量化。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值