我有一个定义树数据结构节点的结构:
struct Node {
int data;
struct Node *children[10];
}
鉴于children
不是动态数组,我想将children
的每个指针初始化为NULL,但后面的内容不起作用:
struct Node {
int data;
struct Node *children[10]={NULL};
}
有解决方法吗?
答案 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?
如果您使用其中一个系统,或者您担心在这些平台上运行的代码,那么我建议您使用我所描述的第一种方法(也是最明确的)方法。它适用于所有平台。