C++中,常量指针 和 指针常量的理解和区分 【容易混淆】

const修饰指针有三种情况

  • 1. const修饰指针 --- 常量指针
  • 2. const修饰常量 --- 指针常量
  • 3. const即修饰指针,又修饰常量

 这三种情况,说实在的并不难,但是中文翻译后,就是合在一起久了就容易混淆。以下简介下如何区分这三者,提供一些本质上的挖掘和记忆诀窍。

 

1. const修饰指针 --- 常量指针

  • 这种情况下,指针本身是不可变的,但指针所指向的数据可以改变。
  • 记忆诀窍:指针的内容不变,指针的指向可变
  • 示例:
const int* ptr; // ptr是一个指向常量的指针
int value = 5;
ptr = &value; // 合法,可以改变ptr指向的地址
// *ptr = 10; // 非法,不能通过ptr修改其指向的值

 

2. const修饰常量 --- 指针常量

  • 这种情况下,指针本身可以改变指向的地址,但指针所指向的数据是不可变的。
  • 记忆诀窍:指针的内容可变,指针的指向不变
  • 示例:
int value = 5;
int* const ptr = &value; // ptr是一个指针常量
// ptr = nullptr; // 非法,指针本身是常量,不能改变指向的地址
*ptr = 10; // 合法,可以通过ptr修改其指向的值

 

3. const即修饰指针,又修饰常量:

  • 这种情况下,指针本身和指针所指向的数据都不可变。
  • 记忆诀窍:指针的内容和指针的指向都不可变。
  • 示例:
const int* const ptr = nullptr; // ptr是一个指向常量的常量指针
// ptr = &value; // 非法,指针本身是常量,不能改变指向的地址
// *ptr = 10; // 非法,不能通过ptr修改其指向的值

通过这些案例和记忆诀窍,你可以更容易地理解和区分这三种情况,记忆起来也会更加轻松。

 

posted @ 2024-02-26 19:32  AlphaGeek  阅读(25)  评论(0)    收藏  举报