当前位置:首页 > C++ > 正文

深入理解C++中的指针常量与常量指针(小白也能掌握的const指针用法详解)

在学习 C++指针常量常量指针 的过程中,很多初学者常常感到困惑。其实,只要掌握 const 关键字在指针声明中的位置规则,就能轻松区分它们。本文将用通俗易懂的方式,带你彻底搞懂 C++ const指针 的两种形式,并通过示例代码加深理解。

深入理解C++中的指针常量与常量指针(小白也能掌握的const指针用法详解) C++指针常量 常量指针 C++ const指针 指针与const关键字 第1张

一、什么是常量指针(Pointer to Constant)?

常量指针是指指向的内容不能被修改,但指针本身可以指向其他地址。换句话说,你不能通过这个指针去改变它所指向的值。

语法格式如下:

const int* ptr;      // 或者写成 int const* ptr;

来看一个具体例子:

#include <iostream>using namespace std;int main() {    int a = 10;    int b = 20;    const int* ptr = &a;  // 常量指针:不能通过ptr修改a的值    cout << "*ptr = " << *ptr << endl;  // 输出:10    // *ptr = 30;  // ❌ 错误!不能修改指向的内容    ptr = &b;       // ✅ 正确!可以指向其他变量    cout << "*ptr = " << *ptr << endl;  // 输出:20    return 0;}

在这个例子中,ptr 是一个常量指针,它指向的内容(即 *ptr)是只读的,但 ptr 本身可以重新赋值,指向 b

二、什么是指针常量(Constant Pointer)?

指针常量是指指针本身的地址不能改变,但可以通过该指针修改它所指向的值。也就是说,一旦初始化后,它不能再指向别的变量。

语法格式如下:

int* const ptr = &variable;

来看一个例子:

#include <iostream>using namespace std;int main() {    int a = 10;    int b = 20;    int* const ptr = &a;  // 指针常量:ptr不能再指向其他地址    *ptr = 30;            // ✅ 正确!可以修改指向的内容    cout << "a = " << a << endl;  // 输出:30    // ptr = &b;          // ❌ 错误!ptr是常量,不能重新赋值    return 0;}

这里,ptr 被初始化为指向 a,之后就不能再让它指向 b。但你可以通过 *ptr = 30 来修改 a 的值。

三、两者结合:既是常量指针又是指针常量

你也可以同时使用两个 const,使得指针既不能修改指向的内容,也不能改变指向的地址:

const int* const ptr = &a;

此时:

  • 不能通过 ptr 修改 a 的值(*ptr = 100; ❌)
  • 不能让 ptr 指向其他变量(ptr = &b; ❌)

四、记忆技巧:从右往左读

记住一个简单规则:从右往左读声明

  • const int* ptrptr 是一个指针,指向 const int(常量指针)
  • int* const ptrptr 是一个常量,类型是 int*(指针常量)

这种阅读方式能帮助你快速判断 const 修饰的是谁。

五、总结

- 常量指针(const int*:值不可改,指针可变。
- 指针常量(int* const:指针不可变,值可改。
- 同时使用两个 const 可实现完全只读。

掌握 指针与const关键字 的组合用法,不仅能写出更安全的 C++ 代码,还能在面试和项目开发中游刃有余。希望这篇教程能帮你彻底理清 C++指针常量常量指针 的区别!