C语言 节点的全局变量



我试图创建一个简单的程序来插入单词到Linked List中,但是我很难理解代表headnext 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中这样做也是可以的。

相关内容

  • 没有找到相关文章

最新更新