C级,2级数组的理想数据类型

时间:2012-11-02 09:20:12

标签: c arrays static initialization

既然I found a way要静态初始化我的项目数组,我需要一个更复杂的结构而不是char *作为值,我需要一个结构(名为atom_s)。

typdef struct atom_s {
  const char *val;
  const char *filter;
} atom_t;

struct
{
  const char *key;
  const atom_t **values;
} key_to_values[] =
{
  { .key = "foo", .values = (const atom_t *[]) { NULL } },
  { .key = "bar", .values = (const atom_t *[]) { { .val = "foo", .filter = "bar" }, NULL } },
};

问题是:我不知道如何在上面的数组声明中初始化atom_s,或者它是否可能。 数组的第二行(使用key =“bar”)不编译:

warning: braces around scalar initializer  
warning: (near initialization for '(anonymous)[0]')
error: field name not in record or union initializer

1 个答案:

答案 0 :(得分:1)

{ 
   .key = "bar", 
   .values = (const atom_t *[]) {
       (const atom_t []) {
           { .val = "foo", .filter = "bar" }
           // how is the user going to know this array has one element?
       },
       NULL 
   }
},

values指向的数组的每个元素指向一个atom_t数组(除了最后一个,为null)。您可能还需要某种方法来终止每个内部数组,除非它们的长度始终相同。