【发布时间】:2019-12-17 05:04:25
【问题描述】:
我有一个代码如下:
#include<stdio.h>
typedef struct node{
int value;
struct node *next;
}node;
int main(){
node *a;
return 0;
}
谁能向我解释为什么 a 必须是指针而不是变量类型节点?谢谢你的帮助
【问题讨论】:
-
谁/在哪里说它必须是一个指针?没有这样的规则。这取决于代码的上下文。
-
@kaylum 你能告诉我在什么上下文中我们使用指针,在什么上下文中我们使用常规变量吗?
-
指针只是一个普通变量,它将地址保存到其他东西作为它的值。您可以声明一个结构,并将在堆栈上保留存储您可以通过声明的变量访问该结构或将其地址分配给一个指针。使用链表,通常不会在堆栈上声明内存,但通常您会为每个节点分配内存中的存储空间。您将节点在内存中的地址分配给一个指针。您还可以使用指针来遍历节点(例如
struct *p = node; while (p != NULL) { p = p->next; }),这是另一种常见的列表用途。 -
Singly Linked List (node only, no wrapper) 与 Singly Linked List of Integers (example) 比较,它提供了一个
head指针(指向列表中第一个节点的指针)和一个tail指针(指向列表中最后一个节点的指针)以避免不得不迭代以在末尾插入下一个节点。
标签: c data-structures linked-list