c++指针相关

发布时间 2023-10-21 20:14:45作者: hacker_dvd

常量指针 (Pointer to Constant)

定义:一个指向常量的指针。这意味着指针指向的值不能被修改,但指针本身可以被修改,即可以重新指向其他地址。

声明:const Type* pointerName;

const int* p1;
int x = 10, y = 20;
p1 = &x;   // Valid
*p1 = 50;  // Error
p1 = &y;   // Valid

指针常量 (Constant Pointer)

定义:一个常量指针,它的地址是固定的,不能被修改。但是,通过这个指针,你可以修改它所指向的值。

声明:Type* const pointerName;

int* const p2 = &x;
*p2 = 50;  // Valid
p2 = &y;  // Error

多级指针

先看一段最基础的代码:

int x = 10;
int* p = &x;
int** pp = &p;

解读多级指针应该从右往左看,先看到的是 *pp,代表 pp 是一个指针,然后再看到int*,代表 pp 指向的是一个 int* 型的指针

假设我们在多级指针中添加 const:

  • case1
int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int* *const pp = &p;

我们从右往左分析:先看到的是一个*const,代表pp是一个指针常量,然后看到的是int*,代表pp指向的是一个int*型的指针

有如下测试程序:

int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int* *const pp = &p;
int* *const pp1 = &p1;

**pp = 100;  // Valid

*pp = p1;  // Valid
pp = pp1;  // Error
  • case2
int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int* const* pp = &p;

我们从右往左分析:先看到的是一个 const*,代表 pp 是一个常量指针,然后看到 int*,代表pp指向的是一个int*型的指针

有如下测试程序:

int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int* const* pp = &p;
int* const* pp1 = &p1;

**pp = 30;  // Valid

pp = pp1;  // Valid
*pp = p1;  // Error
  • case3
int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int const* *pp = &p;

我们从右往左分析:先看到的是一个 *pp,代表 pp 是一个指针,然后看到 const*,代表pp指向的是一个常量指针

有如下测试程序:

int x = 10, y = 20;
int* p = &x;
int* p1 = &y;
int const* *pp = &p;
int const* *pp1 = &p1;
pp = pp1;  // Valid
*pp = p1;  // Valid
**pp = 30;  // Error