如何编写不同大小的6维数组?

时间:2018-02-02 16:06:27

标签: c++ c arrays trie

我正在尝试在c中编写一个结构,用于将数据存储在链接数组中,如下所示:

typedef struct
{
    u8 num;
    struct value* next;
}value;

value arr[4] = {
                 {.num = 0, .next = (value[]){
                                              (value){.num = 0, .next = NULL},
                                              (value){.num = 1, .next = NULL},
                                              (value){.num = 31, .next = NULL}
                                             }},
                 {.num = 1, .next = NULL},
                 {.num = 2, .next = NULL},
                 {.num = 31, .next = NULL}
};

而不是null,将链接数组最多6个层次结构级别。

我怎样才能在C中这样做?我做错了什么?

顺便说一下,整个结构应该是const所以我需要用值初始化它,而不是在运行时再次触摸它。

如果你有一个方法可以用c ++做到这一点,我也可以使用它。

2 个答案:

答案 0 :(得分:3)

我建议使用Boost Multidimensional数组。在C中,内存管理很快就会变得难以处理。见http://www.boost.org/doc/libs/1_63_0/libs/multi_array/doc/user.html

更麻烦的解决方案是嵌套std :: vectors:

std :: vector< std :: vector<的std ::矢量< ...>等。

答案 1 :(得分:1)

这里有两个问题:

首先,你的结构没有标签。所以struct value* next;是指向不完整类型的指针。因此,您无法创建它们的数组。您需要将标记添加到结构中。

其次,内部数组成员的复合文字语法是不需要的,因为您已经知道您有一个该类型的数组。此外,因为这会创建单独的对象而不是充当初始化程序,所以这会产生错误,因为在文件范围内有一个对象,初始化程序不是常量。所以也要删除它。

完成这些修复后,你应该这样:

typedef struct value
{
    u8 num;
    struct value* next;
}value;

value arr[4] = {
                 {.num = 0, .next = (value[]){
                                              {.num = 0, .next = NULL},
                                              {.num = 1, .next = NULL},
                                              {.num = 31, .next = NULL}
                                             }},
                 {.num = 1, .next = NULL},
                 {.num = 2, .next = NULL},
                 {.num = 31, .next = NULL}
};