我目前正在学习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));
变量会发生什么情况,它只是临时存储堆上分配的新内存空间的引用吗?在
island *p_island0 = create(name);
之后,最终存储在p_island0
中的是什么?由malloc()
或创建的地址是另一个指针,前一个i
变量的值复制到了…堆叠? 最佳答案
当您执行return i;
操作时,存储在i
中的指针值将复制到调用函数中的变量p_island0
中,然后i
将超出范围。分配的内存永远不会超出范围,它有完整程序的生命周期,或者直到您使用指针值调用free
为止。哪个变量存储指针值无关紧要,只要它是malloc
调用返回的原始指针值。
函数返回值的方式不是由C规范指定的,这取决于编译器、操作系统和底层硬件。很可能不涉及堆栈,但返回的值存储在CPU寄存器中。