C++问题小结--2.通过几个例子谈谈const与*

const在C++里能够封锁参数,修饰函数,修饰返回值

首先,清楚一个概念,比如说我们定义了一个char类型的指针char *p,那么,在这里,p是一个char *类型的指针。p指的是p指针的指向的地址,*p是这个指针的指向空间的内容(或者说是指针所指向空间的值)。

char *p = &i;  //那么这里*p存的是这个i变量的值;

这里写图片描述

下面让我们从几个例子入手理解const的位置放置的不同引起的含义的不同:

int *p;
const int * p;
int const * p;  //第一二行是等价的
int * const p;
const int * const p;

这里有一个简便方法用来区分这几条语句

这里写图片描述

(1)const int *p = &a;
表示:p的指向空间的内容(或者说指针所指向空间的值)不能被修改,或者说:这个指针所指向的空间的内容不可通过改变*p的值来改变(个人觉得后者描述更加准确具体一些)(图一)。当然,a的值可以改变,但是a的值改变,却仍然不能改变p所指向的地址(图二)。如图:(int const *p = &a;与之等价,不在赘述。)

图一:

这里写图片描述

图二:

这里写图片描述

p的地址仍然是0018FF44

(要注意的是p的地址实际上是a的地址,这个容易使人啼笑皆非,但是事实如此

这里写图片描述

但是上面的例子可以修改p的地址

这里写图片描述

(2)int * const p = &a;
表示:p指针的地址不能被修改,或者是说指针的指向不能被修改。但是*p却可以被修改,也就是说p所指向的空间的内容可以被修改。

图三为p最初的地址

图三:
这里写图片描述

图四试图修改p的地址

图四
这里写图片描述

但是修改*p却是可以的。(如图五)

图五:
这里写图片描述

(3)const int * const p;
表示:第一个const表示p所指向的空间的内容不可以通过*p来修改;第二个const表示p的地址,或者是说指针的指向不能被修改。

至此,const容易混淆的地方我们已经解释清楚,总结一下无非就是:

当const在*的左边,则表示指针所指向的空间的内容不能通过改变*p的值来修改,或者说指针所指向空间的值不能被修改。
当const在*的右边,则表示指针的地址不能被修改,或者说指针的指向不能被修改。
值得注意的是下面这段语句里:a的地址即就是指针p的地址。

int *p;
p = &a;

这个主要应用在C++中的this指针这块

这里写图片描述

如上图,类中所定义的函数貌似只有三个参数,实质上有四个,第四个是什么呢?那就是我们的this指针,这个参数是这样定义的CGoods *const this,这里就用到了我们今天谈到的const类型的用法,它使得this指针的地址无法改变,达到封锁参数的目的,这样就打消了修改this指针的念头。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值