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通过两层间接寻址给出相同的值。- 在将指针传递给函数或处理复杂数据结构时,它们可能会很有用。