我目前正在学习 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);
在这个代码示例中有几件事我很难理解:
i
变量赋值给malloc(sizeof(island));
时会发生什么,是不是只是临时存放新内存空间的引用分配在 HEAP 上?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/