我试图创建一个简单的程序来插入单词到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
在它前面吗?
但是我是否立即将它们赋值为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;
,这是无效的)
首先,正确的方法是:
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;
然后,您只需要用Node
声明struct NODE
变量,用Node_ptr
声明struct NODE*
变量,如下所示:
Node_ptr head = NULL;
Node_ptr next = NULL;
我认为这将是一个很好的做法,初始化为NULL
当你声明它。但是如果你在main
中这样做也是可以的。