前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++随记(五)---const 与 指针

C++随记(五)---const 与 指针

作者头像
TeeyoHuang
发布2017-12-28 14:48:14
5480
发布2017-12-28 14:48:14
举报

C++随记(五)---const 与 指针

const 限定符它把一个对象转换成一个常量,const与define。两者都可以用来定义常量,但是const定义时,定义了常量的类型,所以更精确一些。

const和指针一起用时会有些有趣,我们下面一一分析一下各种情况:

1、指针指向一个常量对象。

例子:

代码语言:javascript
复制
int year = 2017;
const int *pt = &year;

这是一个典例,pt 指向一个const int,你可以直接把const int 假装当作是一个类型,就好理解定义的意思了,比如 int * pt = &year;就是pt指向一个int变量的指针, double * pt =&year;就是pt 指向一个double变量的指针,const int * pt = &year; pt就是一个指向 const int的指针。 含义为: 不能通过指针pt来改变year的值!但是!我可以直接通过year本身来改变它的值。

这种操作看起来好像没什么用,但是其实是有用的,比如当用函数中的按地址传递时,我们很多时候就是把变量的地址传入函数中去执行一些操作,这个时候限定我无法用地址来改变一些值就显得很有用处了。后面的博文中有机会会看到这样的例子。

注意:

    ①上面代码的例子,我是将一个常规变量 的地址赋值给了指向const的指针。这是合法的。

    ②还有一种情况,将 const 变量的地址赋值给   指向const的指针,

代码语言:javascript
复制
const int month= 6;
const int * pt2 = & month;

    合法的操作,这样我既不能通过month来修改它的值,也不能通过它的地址修改它的值,这样这个变量在正常情况下就形成了“绝对防御”了,我无法改变它的值。

    ③将 常规变量的地址赋值给常规指针,这个就是我们常见的操作,不讨论了;

    ④将 const变量的地址 赋值给 常规变量指针,不合法!!!

    例如:

代码语言:javascript
复制
const int day= 3;
int * pt3 = & day; //不合法

        为什么不合法?因为我第一句已经说了是一个const int,但是如果我允许指针来修改它的值的话,那岂不是实力打脸了? 综上,当变量和指针分别为const情形这2x2=4种情况要区分好。常规指针只能指向常规数据地址。

        将指针参数声明为指向常量数据的指针有两条理由: · 这样可以避免由于无意间修改该数据而导致的编程错误; · 使用const使得函数能够处理const和非const实参,就如我上述①②,否则只能接受非const数据,如情况③。         这里还要注意一点,上述说的是不能通过指针来修改变量,然后也说了可以通过变量本身来修改变量, 但是 还应该补充一点,相信大家也应该会想到这样的情况,就是是否可以修改指针自己的值? 答案是:可以! 也就是不管你变量和指针自己玩的多欢,就是不许你通过指针去修改变量。不管大陆和中国台湾各自玩的多high,就是不许你中国台湾去代表中国搞事情,就是这个意思吧~

        好了说了这么多,来看第二类情况了

2、指针本身声明为常量

       来看两个语句:

代码语言:javascript
复制
int province = Taiwan;
const int *pt1 = &province;//A
int *const pt2 = &province;//B

好了现在来找不同,很明显A和B两个语句const的位置不一样, 语句A上文已经研究了,指向 const int 的一个指针 pt1,不能通过pt1来修改province 语句B。这里的意思是,声明了一个 指向int 类型的 const 指针 pt2,pt2现在自己都不能修改自己的值了,因为 指针本身被声明为了常量。 所以情况1中,我的用于是指向const对象的指针,强调的是对象是const的,而情况2中,我们就应该说是const指针,因为指针本身是const 的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++随记(五)---const 与 指针
  • 1、指针指向一个常量对象。
  • 2、指针本身声明为常量
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档