【发布时间】:2014-08-07 04:23:50
【问题描述】:
我正在使用以下代码在链表的前面推送一个新节点。我对某些概念有一些疑问。
void push(struct node **head, int data)
{
// create a new node
struct node *new_node;
new_node = malloc(sizeof(struct node));
// add data
new_node->data = data;
// add node to front of list
new_node->next = *head;
*head = new_node;
}
当我将
new_node的值分配给*head = new_node中的*head,然后返回时,指针new_node是否被销毁,因为它是一个自动变量?new_node调用分配给它的内存指针在new_node被销毁后是否仍然可以合法访问,因为它在堆上,并且从未被释放?我们只是使用
new_node作为占位符来将地址存储到某个内存中,在完成分配和其他内容之后,我们就放手了。那么new_node是struct node类型是否重要,因为所有指针都只是整数,我们只是用它来存储内存地址。指针类型在哪里变得相关,即为什么我必须声明指针的数据类型以匹配指针的数据类型?我可以将所有指针声明为整数,然后在使用前显式转换它们以匹配指针的数据类型吗?
【问题讨论】:
标签: c pointers struct dynamic-memory-allocation type-safety