【C/C++】指针常量、常量指针分不清?竟还能这样记!

1. 名字区分

// 指针变量定义方法
// 示例:定义一个指向int类型的指针,初始化为空
int * p = NULL;

众所周知,*在定义时标志这是指针,在使用时表示取内存单元内容p是变量名。

这样被定义好后,可以对变量名p有两个操作:

  1. 查看*p(p所指内容)的值,也可修改*p的值;

  2. 查看p(p本身存放了所指内存的地址值)的值,也可修改p的值(即修改其所指)

如果要定义指针常量、常量指针,加const的位置在*前或变量名p前,那么它俩该如何区分呢?

记忆方法

const含义是”常量“,那么

  • 常量指针

申明示例:const int * p = NULLint const * p=Null

忽略int说明类型,*标志这是指针。∵const*前,表示常量指针

  • 指针常量

申明示例:int * const p = NULL

*标志这是指针。∵*cosnt前,表示指针常量

2. 用法区分

const含义:

const修饰的量,在定义后就不能改变

*含义:

  1. 在定义时标志这是指针

  2. 在使用时表示取内存单元内容

2.1 常量指针 const *

申明示例:const int * p = NULLint const * p=Null

const修饰*

*的第一个含义,仅在定义变量时用。现在我们讨论的是使用时的区别,所以只看*第二个含义–取内存单元内容

  1. *const修饰,表示*p只读,不能被修改值

  2. 但是,p是可以修改的,即可以重新指向另一个内存单元

2.2 指针常量 * const

申明示例:int * const p = NULL

const修饰变量名p

  1. const*的后面,所以不关*的事。所以,*p(即内容值)可以随意修改

  2. pconst修饰,所以,p(即指向)不能被修改

3. C++的引用与指针常量

定义示例:int &b = a;

查看文档可知,引用只可作为唯一一个变量的别名(在定义后就不能被修改成别的变量的别名)

使用时,ab的值同时修改同时变化

是不是和指针常量很像:内容可改,而指向不能改

引用的内部实现就是一个指针常量,然后被高度封装以方便使用

发布了10 篇原创文章 · 获赞 33 · 访问量 602

猜你喜欢

转载自blog.csdn.net/qq_33973359/article/details/105465686