【发布时间】:2021-06-29 11:44:52
【问题描述】:
我正在尝试理解此代码中的目的以及它是如何工作的双指针。
为什么我们在声明函数中使用**p,而在函数内部使用*p?
void allocate(int** p)
{
*p = (int*)malloc(sizeof(int));
}
int main()
{
int *p = NULL;
allocate(&p);
*p = 42;
}
【问题讨论】:
-
**p是指向指针的指针,所以*p是指向p的指针 -
int **是“指向 int 的指针”。double *是一个双指针。 -
int**在概念上与int*相同,只是它所持有的地址是int*而不是int。如果您在到处删除一级指针后理解该示例,那么理解该示例是相同的过程。如果您不理解更简单的版本,我建议您改为学习。
标签: c pointers pass-by-reference function-declaration function-parameter