C 语言 - 指向指针的指针

指向指针的指针

您也可以拥有一个指向另一个指针的指针。这被称为指向指针的指针(或"双重指针")。

起初听起来可能令人困惑,但这只是多了一层间接寻址:一个存储另一个指针地址的指针。

可以这样理解:普通指针就像一张写有地址的便条。指向指针的指针就像另一张便条,告诉您第一张便条存放在哪里。

注意:作为初学者,您不需要经常使用指向指针的指针。但是,您可能会在更高级的程序中看到它,所以了解它的含义和工作原理是很好的。

让我们看一个简单的例子来理解这是如何工作的:

实例

int myNum = 10;       // 普通变量
int *ptr = &myNum;    // 指向 int 的指针
int **pptr = &ptr;    // 指向指针的指针

printf("myNum = %d\n", myNum);
printf("*ptr = %d\n", *ptr);
printf("**pptr = %d\n", **pptr);

结果:

myNum = 10
*ptr = 10
**pptr = 10

亲自试一试

这是逐步发生的情况:

  • myNum 保存值 10
  • ptr 保存 myNum 的地址。
  • pptr 保存 ptr 的地址。
  • *ptr 给出 myNum 的值。
  • **pptr 通过两层指针也给出 myNum 的值。

所以:

  • *ptr = myNum 的值
  • **pptr = 通过两层得到的 myNum 的值

通过指向指针的指针更改值

由于 **pptr 可以访问原始变量,您也可以使用它来更改变量的值:

实例

int myNum = 5;
int *ptr = &myNum;
int **pptr = &ptr;

**pptr = 20; // 改变 myNum 的值

printf("myNum = %d\n", myNum); // 输出 20

亲自试一试

总结

  • 指向指针的指针存储另一个指针的地址。
  • *ptr 给出一个变量的值。
  • **pptr 通过两层间接寻址给出相同的值。
  • 将指针传递给函数或处理复杂数据结构时,它们可能会很有用。