Menu
CoddyTech

常量指针

Coddy C++ 指针 课程的第 5 课,共 14 课。

常量指针是指初始化后其值(它指向的内存地址)不能更改的指针。不过,它指向的内存位置中的值可以修改。提到常量指针时,主要有两种类型的指针:

  • 指向常量的指针:指向一个常量值
  • 常量指针:始终指向一个值

那么,它们有什么区别呢?


1. 指向常量的指针

这种类型的指针指向一个常量值。不能通过这个指针修改该值。这意味着它是一个普通指针,只是指向一个常量值。使用这种指针时,它指向的地址可以更改。

int a = 5, b = 10;
// 指向常量 int 的指针
int const * ptr = &a;
 
// 这样做是允许的:
ptr = &b; // 更改指向的地址
 
// 这样做是不允许的:
*ptr = 10; // 尝试修改常量值

2. 常量指针

常量指针指向一个非常量值,但指针本身不能改为指向其他地址,也就是说,它指向的地址是固定的。

int a = 5, b = 10;
// 指向 int 的常量指针
int * const ptr = &a;

// 这样做是允许的:
*ptr = 10; // 修改非 const 值

// 这样做是不允许的:
ptr = &b; // 尝试修改常量指针保存的地址

如你所见,对于指向常量值的指针,const 关键字放在 * 前面;对于指向非常量值的常量指针,const 放在 * 后面。我们也可以将两种情况结合起来,让常量指针指向一个常量值。为此,我们要在星号前后各使用一个 const 关键字,不过这种情况很少用到。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

从输入中读取两个数字,创建一个常量指针 constPtr 和一个指向常量的指针 ptrConst,将 constPtr 初始化为指向第一个数字,然后将它的值改为第二个数字,并将 ptrConst 设置为指向第二个数字。

亲手试试

#include <iostream>

using namespace std;

int main() {

    // 在这里输入代码


    // 不要修改下面的代码
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    if(&a == constPtr)
        cout << "&a == constPtr" << endl;
    if(&b == ptrConst)
        cout << "&b == ptrConst" << endl;

    return 0;
}

C++ 指针中的所有课

自己练习: C++ 在线编译器