如何初始化具有指向struct数组的指针的struct数组?

时间:2014-06-17 07:56:05

标签: c c99

这是我的结构:

struct ini_entry {
    const char *section;
    const char *name;
};

struct ini_parser {
    bool (*parser) (void *ctx, const char *file, struct collection_item **vals, int nval);
    struct ini_entry *entries;
};

这是我的初始化程序:

static struct ini_parser parsers[] = {
    {NULL, &(struct ini_entry) {"test", "xxx"}}
};

我需要在初始化程序中添加更多ini_entry。无论如何在单个声明中使用静态初始化来执行此操作吗?

抱歉我的英文。

1 个答案:

答案 0 :(得分:0)

首先,如果您打算使用struct literal初始化它,struct ini_entry *entries;应该是struct ini_entry const *entries;(即使您没有)。

但是这种布局可能更容易阅读:

struct ini_entry const foo_entries[] = {
    { "test", "xxx" },
    { "flub", "yyy" },
    { "gnas", "zzz" },
    { NULL, NULL }     // list terminator presumably required
};

struct ini_parser const parsers[] = {
    { "foo", foo_entries },
    { "bar", bar_entries }
};

请注意,可以使用计数列表而不是使用结束哨兵;列表的长度是编译时常量(sizeof foo_entries / sizeof foo_entries[0]),您可以将其作为struct ini_parser的第三个成员。