首页 > 解决方案 > 在内存位置中使用双指针

问题描述

我试图了解目的以及它是如何在这段代码中工作的双指针。

为什么我们**p在声明函数中使用但在我们使用的函数内部*p

void allocate(int** p)
{
  *p = (int*)malloc(sizeof(int));
}

int main()
{
  int *p = NULL;
  allocate(&p);
  *p = 42;
}

标签: cpointerspass-by-referencefunction-declarationfunction-parameter

解决方案


该函数的参数p类型为指向 的指针int,即int **。因此,引用p指的是该类型的对象。

表达式*p 取消引用 p为您提供类型的表达式(也是左值int *。这与函数中的类型相匹配pmain并且实际上是指该对象。这允许我们在函数内部allocate修改 in 的值pmain包含动态分配的内存块的地址。


推荐阅读