Eli*_*sky 19
动态数据结构(列表,树等)用于malloc在堆上分配其节点.例如:
/* A singly-linked list node, holding data and pointer to next node */
struct slnode_t
{
struct slnode_t* next;
int data;
};
typedef struct slnode_t slnode;
/* Allocate a new node with the given data and next pointer */
slnode* sl_new_node(int data, slnode* next)
{
slnode* node = malloc(sizeof *node);
node->data = data;
node->next = next;
return node;
}
/* Insert the given data at the front of the list specified by a
** pointer to the head node
*/
void sl_insert_front(slnode** head, int data)
{
slnode* node = sl_new_node(data, *head);
*head = node;
}
Run Code Online (Sandbox Code Playgroud)
考虑如何将新数据添加到列表中sl_insert_front.您需要创建一个节点来保存数据和指向列表中下一个节点的指针.你打算在哪里创造它?
malloc在C中用于在堆上分配内容 - 内存空间可以在运行时动态增长和收缩,并且其所有权完全在程序员的控制之下.还有更多的例子,这是有用的,但我在这里展示的是一个代表性的例子.最终,在复杂的C程序中,您会发现程序的大部分数据都在堆上,可通过指针访问.正确的程序总是知道哪个指针"拥有"数据,并在不再需要时仔细清理分配的内存.