我试图创建一个简单的程序来将单词插入Linked List
,但我很难理解代表head
的全局指针和next
Nodes
。
根据我的理解,如果我有一个struct
,例如:
typedef struct NODE
{
char *item;
struct Node *next;
} Node, *Node_ptr;
然后我可以简单地通过在typedef
:
struct Node_ptr* head = NULL;
struct Node_ptr* next = NULL;
但我会立即将它们分配给NULL
吗?或者在main
等方法中执行此操作?另外,我必须在其前面加struct
吗?
答案 0 :(得分:1)
但我会立即将它们分配给NULL吗?或者在main?
等方法中执行此操作
如果您没有使用显式初始化程序,则在文件范围(您称之为全局)中定义的指针将自动初始化为NULL
。因此,在main
中通过分配来初始化它们是多余的。
另外,我是否必须在它前面加上结构?
使用定义类型和别名类型定义,有3种有效(和等效)方法可以声明这样的指针:
/* The = NULL initializer is optional at file-scope */
Node_ptr bla = NULL;
Node *bla = NULL;
struct NODE *bla = NULL;
(但不能使用无效的struct Node_ptr* head = NULL;
。)
答案 1 :(得分:1)
首先,正确的方法是:
typedef struct NODE
{
char *item;
struct NODE *next; // Notice here
} Node, *Node_ptr;
以上代码相当于
struct NODE
{
char *item;
struct NODE *next;
};
typdef struct NODE Node , *Node_ptr;
然后,您只需要使用struct NODE
,Node
和struct NODE*
声明Node_ptr
变量,如下所示:
Node_ptr head = NULL;
Node_ptr next = NULL;
我认为在您声明时将其初始化为NULL
是一种很好的做法。但如果你在main
中这样做,那也没关系。