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修改其指向的值
通过这些案例和记忆诀窍,你可以更容易地理解和区分这三种情况,记忆起来也会更加轻松。

浙公网安备 33010602011771号