将指针数组初始化为NULL

时间:2015-05-04 16:06:58

标签: c arrays pointers struct

我有一个定义树数据结构节点的结构:

struct Node {
  int data;
  struct Node *children[10];
}

鉴于children不是动态数组,我想将children的每个指针初始化为NULL,但后面的内容不起作用:

struct Node {
  int data;
  struct Node *children[10]={NULL};
}

有解决方法吗?

3 个答案:

答案 0 :(得分:2)

struct Node {
  int data;
  struct Node *children[10];
} a = {.children = {0}};

a是一个struct Node对象,其中children成员的所有元素都初始化为空指针。

答案 1 :(得分:2)

这个

 struct *Node children[10];  

错了。我甚至都不会编译。它应该是

 struct Node *children[10];  

要将成员children的所有元素初始化为NULL,您可以使用指定的初始值设定项。

struct Node {
  int data;
  struct Node *children[10];
} node = {.children = {NULL}};

答案 2 :(得分:1)

您无法在struct的说明中初始化数据,因为尚未分配任何内存。

让我们看看你会看到的两种分配方式:

筹码

struct Node my_node = {
    0,
    {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL}
};

或者,因为未列出的值将默认为0 ...

struct Node my_node = {};

堆:

这里,唯一的选择是使内存无效。我们可以使用calloc()来执行此操作,因为它返回的内存已清零。

struct Node *my_node = calloc(1, sizeof(*my_node));

或者,我们可以明确使用memset()

struct Node *my_node = malloc(sizeof(*my_node));
memset(my_node, 0, sizeof(*my_node));

注意:

我通常假设NULL == 0。这不一定是真的。如果您想详细了解这些(主要是)历史系统:When was the NULL macro not 0?

如果您使用其中一个系统,或者您担心在这些平台上运行的代码,那么我建议您使用我所描述的第一种方法(也是最明确的)方法。它适用于所有平台。