C++——常量指针、指针常量

74 阅读1分钟

常量指针和指针常量

1. 常量指针

  • 定义:  指针指向的内存地址中的值是常量,不能通过该指针修改指向的值,但指针本身可以指向其他地址。

  • 声明:  const 数据类型 * 指针变量名;

    int a = 10;
    int b = 20;
    const int *pa1 = &a; // pa1 是一个指向常量整数的指针
    // *pa1 = 30;  // 错误!不能通过 pa1 修改 a 的值
    pa1 = &b;      // 正确!pa1 可以指向其他地址
    

2. 指针常量

  • 定义:  指针本身是一个常量,一旦初始化后,它所指向的地址不能改变,但可以通过该指针修改指向的内存地址处的值。

  • 声明:  数据类型 * const 指针变量名;

    • 例如:

      int a = 10;
      int b = 20;
      int *const pa2 = &a; // pa2 是一个指向整数的常量指针
      *pa2 = 30;      // 正确!可以通过 pa2 修改 a 的值
      // pa2 = &b;      // 错误!pa2 不能指向其他地址
      
  • 理解:  const 修饰的是 pa2,即指针本身。

  • 常用于让指针实现只读。

3. 指向常量的指针常量

  • 定义:  指针本身是常量,并且它指向的内存地址中的值也是常量,两者都不能被修改。
  • 声明:  `const 数据类型 * const 指const int * const pa3 = &a; // pa3 是一个指向常量整数的常量指针 // *pa3 = 30; // 错误!不能通过 pa3 修改 a 的值
    // pa3 = &b; // 错误!pa3 不能指向其他地址
  • 理解:  两个 const 各司其职,第一个 const 修饰 *pa3,表示不能通过 pa3 修改指向的值;第二个 const 修饰 pa3,表示 pa3 的指向不能修改。

例子: image.png