C++ 中 指针常量 常量指针 区别

时间:2024-12-18 07:13:56

在 C++ 中,指针常量(const 指针)和常量指针(指向常量的指针)有显著区别。我们可以通过简单的例子来说明。

1. 指针常量(Constant Pointer)

指针常量是指“指针本身是常量”,即指针的值(地址)不能改变,但是指针指向的对象的值是可以改变的。也就是,指针不能指向其他地址,但可以修改其指向的值。

语法

int* const ptr;

2. 常量指针(Pointer to Constant)

常量指针是指“指针指向的对象是常量”,即指针指向的数据不能被修改,但是指针本身是可以改变的。

语法

const int* ptr;

3. 常量指针与指针常量区别

  • 指针常量:指针本身是常量,不能指向其他位置。
  • 常量指针:指向的内容是常量,不能修改内容,但指针本身可以改变。

示例代码:

#include <iostream>

int main() {
    // 定义指针常量
    int a = 10, b = 20;
    int* const ptr1 = &a;  // 指针常量,ptr1 一直指向 a
    // ptr1 = &b;  // 错误,不能修改 ptr1 的地址

    std::cout << "指针常量 ptr1 指向的值: " << *ptr1 << std::endl;
    *ptr1 = 30;  // 允许修改 ptr1 指向的值
    std::cout << "修改 ptr1 指向的值后: " << *ptr1 << std::endl;

    // 定义常量指针
    const int* ptr2 = &a;  // 常量指针,ptr2 可以指向不同地址,但不能修改所指向的值
    // *ptr2 = 15;  // 错误,不能修改 ptr2 指向的值
    ptr2 = &b;  // 允许修改 ptr2 的地址
    std::cout << "常量指针 ptr2 指向的值: " << *ptr2 << std::endl;

    return 0;
}

运行结果:

指针常量 ptr1 指向的值: 10 修改 ptr1 指向的值后: 30 常量指针 ptr2 指向的值: 20

解释:

  1. 指针常量(ptr1
    • ptr1 是一个指针常量,最初指向 a,不能更改指针的值(即不能指向 b),但可以通过 ptr1 修改 a 的值。
  2. 常量指针(ptr2
    • ptr2 是一个常量指针,指向 a,不能通过 ptr2 修改 a 的值,但可以让 ptr2 指向 b(改变指针的地址)。

总结:

  • 指针常量int* const ptr):指针不可改变,但指向的数据可以改变。
  • 常量指针const int* ptr):数据不可改变,但指针可以改变。