gpt4 book ai didi

c - 了解指针和 malloc

转载 作者:太空狗 更新时间:2023-10-29 15:34:57 24 4
gpt4 key购买 nike

我目前正在学习 C 语言,并且正在努力研究指针和 malloc() 函数。

所以在我书中的示例中,我定义了以下函数:

island* create(char *name) {
island *i = malloc(sizeof(island));
i->name = strdup(name);
i->opens = "09:00";
i->closes = "17:00";
i->next = NULL;
return i;
}

然后这样调用:

char name[80];
fgets(name, 80, stdin);
island *p_island0 = create(name);

在这个代码示例中有几件事我很难理解:

  1. i变量赋值给malloc(sizeof(island));时会发生什么,是不是只是临时存放新内存空间的引用分配在 HEAP 上?

  2. island *p_island0 = create(name); 之后,p_island0 中最终存储了什么?由 malloc() 创建的地址或者是另一个创建的指针,并且先前的 i 变量的值复制到 ... STACK 上的 p_island0 ?

最佳答案

当您执行 return i; 时,存储在 i 中的指针值被复制到变量 p_island0 中调用函数,然后 i 超出范围。分配的内存永远不会超出范围,它具有整个程序的生命周期,或者直到您使用指针值调用 free 为止。哪个变量存储指针值并不重要,只要它是 malloc 调用返回的原始指针值即可。

函数如何返回值 C 规范没有指定,它取决于编译器、操作系统和底层硬件。很可能不涉及堆栈,但返回值存储在 CPU 寄存器中。

关于c - 了解指针和 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37538892/

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