gpt4 book ai didi

c - 理解 C 语言中的指针到指针逻辑

转载 作者:行者123 更新时间:2023-11-30 16:56:09 24 4
gpt4 key购买 nike

我遇到了这段代码,并且对这里到底发生了什么感到有点困惑:

int **p;
p = malloc(sizeof(int *));
*p = malloc(sizeof(int));

**p = 10;


printf("%d\n",**p);

首先,p是一个指向指针的指针,但它不指向其他任何东西,那么为什么我们必须在这里进行两次malloc呢?同样在第一个 malloc 调用中,为什么不需要在 p 周围有两个指针值:例如:

**p = malloc(sizeof(int *));

而不是:

p = malloc(sizeof(int *));

我知道下一行引用是指针并将值 10 存储在其中,然后打印它。然而,我并没有真正理解前面的台词,或者至少不明白为什么它们是在这种心态下完成的。

我习惯于在这种心态中看到双指针:

int main(void) {
int *ptr;
int **ptr_ptr;

ptr = malloc(sizeof(int));

*ptr = 5;
ptr_ptr = &ptr;

printf("%d\n",**ptr_ptr); /*prints 5*/

free(ptr);
return 0;
}

因为双指针实际上指向这里的某个东西。任何有关第一段代码的帮助将不胜感激。

最佳答案

由于 int **p 是一个指向指针的指针,因此它将保存 int* 类型指针的位置或地址。但必须首先为 int* 分配足够的内存,它将存储在 p 指向的位置。此行执行此工作,它初始化 p:

p = malloc(sizeof(int *));

现在,int* 的位置已知,必须分配内存以在 *p 指向的内存中存储实际的 int > 这是我们的 int* 指针。因此需要再次调用 malloc() 来初始化 int* 类型指针。

*p = malloc(sizeof(int));

当这一切完成后,就可以给**p赋值一个整数,它就是*p指向的int:

**p = 10;

关于c - 理解 C 语言中的指针到指针逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40031032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com