节点的全局变量

时间:2015-10-24 00:02:15

标签: c struct linked-list global-variables

我试图创建一个简单的程序来将单词插入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吗?

2 个答案:

答案 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 NODENodestruct NODE*声明Node_ptr变量,如下所示:

Node_ptr head = NULL; 
Node_ptr next = NULL;

我认为在您声明时将其初始化为NULL是一种很好的做法。但如果你在main中这样做,那也没关系。