如果我创建以下结构:
typedef struct node {
int a;
char b[100][15];
struct node *prev;
struct node *next;
} Scope;
我必须使用指针来初始化我的 head_node 吗?目前这是我的初始化函数:
Scope initScope() {
Scope head;
head.a = 1;
head.prev = NULL;
head.next = NULL;
return head;
}
在某些函数中我会说
Scope head = initScope();
到目前为止,这对我来说似乎没问题,但我不确定我将如何创建一个新节点。我猜我需要一个 Scope 类型的指针。我将不得不 malloc 它的大小范围,然后初始化它的值。创建头部时我应该做同样的事情吗?我试图回答的根本问题是指针在这里的目的是什么?如果在我的结构定义中写了
*Scope
代替
Scope
?如果我需要使用指针来创建节点,那么为什么不将结构设为指针呢?根据我的理解,指针只允许我操作内存,那么当我创建一个节点并继续前进时会留下什么?
最佳答案
This seems okay to me so far, but I'm not sure how I will create a new node.
Scope
对象的 prev
和 next
成员必须指向其他 Scope
对象才能创建链接列表。
这些对象可能位于静态分配的对象数组或动态分配的对象中。
从静态分配的数组创建链表
Scope scopes[10]; scopes[0].prev = NULL; scopes[9].next = NULL; for (int i = 0; i < 9; ++i ) { scopes[i].next = &(scopes[i+1]); scopes[i+1].pref = &(scopes[i]); }
从动态分配的对象创建链表
Scope* node = malloc(sizeof(*node)); node->next = node->prev = NULL; for ( int i = 0; i < 9; ++i ) { Scope* temp = malloc(sizeof(*temp)); temp->prev = NULL; temp->next = node; node->prev = temp; node = temp; }
您还可以使用一次调用动态分配所有对象。
Scope* scopes = malloc(10*sizeof(*scopes));
然后像对待静态分配的数组一样对待它。
您需要使用正确的
free
调用,具体取决于您用于分配对象的方法。
关于c - 指针如何与 C 中的双向链表一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36467310/