指针常量和常量指针

大家好,我叫徐锦桐,个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识,还有日常折腾的经验,欢迎大家来访。

指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。

正文

命名

其实我们不应该这么叫它们,这只是音译过来的,这么翻译让我们的理解难上加难,这里我推荐一个命名方法,这样的命名方法又好理解,又不容易懵逼。

  • 指向常量的指针——const int* p
  • 本身是常量的指针——int* const p
  • 所指和本身都是常量的指针——const int* const p

巧记

我有一种好的记忆方法,就是先找到星号(*),然后看它的两边,右边是对指针P本身的限定,左边是对p所指向的东西的限定。
举个例子吧。

  • 1- const int* p,星号的右边是p,说明p就是一个普通的指针,左边是const int说明指针指向的东西是const int型的(不能修改)。但是指针是普通的,所以指针指的方向可以修改。
  • 2- int* const p,星号的右边是const p说明指针p的方向是不能变的。而左边就是普通的int,所以指向的那个数据是可以变化的。
  • 3- const int* const p,是指针的指向和指向的东西都不可更改。

拓展

引用和指针的关系

  • 引用是一个指向不可变的、被编译器自动解引用的指针,即,引用是一个被编译器自动解引用的“本身是常量的指针”。
  • 就是int &ra = a会自动被转化为int* const ra = &a,将ra自动转化为*ra的过程,就是上面定义中所说的“自动解引用”。
  • 那么,什么是const引用(即我们说的常量引用,但我希望大家称其为const引用而不是常量引用)呢?很显然,const int &ra=a就相当于const int* const ra=&a了。

参考博客

你可能感兴趣的:(cpp,指针常量,常量指针)