Incompatible pointer types initializing 初始化一个基本的 trie 节点

incompatible pointer types initializing initializing a basic trie node

我知道 C 在文件级初始化方面非常挑剔。或者更确切地说,我只是还不知道常量表达式是什么意思。

我想要做的是用所有空指针初始化一个节点(又名结构节点)。

//Trie node definition
typedef struct node{
    bool is_word;
    struct node* next[27]; //27 for the valid number of chars

}node;


struct node* empties[27];
node empty = {.is_word = 0, .next = empties};

dictionary.c:24:33: error: incompatible pointer types initializing 'struct node *' with an
      expression of type 'struct node *[27]' [-Werror,-Wincompatible-pointer-types]
node empty = {.is_word=0,.next =empties};
                                ^~~~~~~
dictionary.c:24:33: error: suggest braces around initialization of subobject
      [-Werror,-Wmissing-braces]
node empty = {.is_word=0,.next =empties};

我在尝试初始化时遇到错误。我也会尝试手动初始化成员,但 27 个索引使这非常乏味。有没有办法在文件级别循环初始化?

尝试node empty = {0, {0}};

这是初始化结构和数组的有效方法,或者在本例中,初始化包含数组的结构。

How to initialize all members of an array to the same value? 有更多关于数组初始化的内容。但是您也可以将初始化程序嵌入到结构中,如此处所示。

依赖永久变量(非自动,非动态)0初始化是可以的。但是,错误报告类型错误: next 是一个指针数组,而您使用指向数组的指针对其进行初始化。如果你真的想要一个指向数组的指针,请使用 struct node (*next)[]).

因此,第二条消息已经包含了您拥有嵌套复合数据类型(结构中的数组)的提示。请记住,每个复合类型的初始值设定项都需要用大括号括起来。