如何在Main()之前创建一个数组/结构并在C中初始化它

时间:2013-02-10 15:02:05

标签: c struct initialization global

我知道在C中,解决“初始化元素不是常量”的一种方法错误是在main()函数内创建strcuture。但是假设我有一个结构数组,并希望将它用作全局数组。我该如何创建和初始化它?

struct A *b = malloc(10*sizeof(struct A)); // Want to keep the malloc
void init_A_types(struct A* t)
{
  t->elm1=0; t->elm2=1;
}
...
int Main() {
  for (k=0;k<10;k++)
  init_A_types(b+k);
  ...
  return 0;
}

2 个答案:

答案 0 :(得分:2)

如果你想要一个数组,为什么不把它声明为一个数组呢?

struct A {
    const char *str;
    int n;
};

struct A b[3] = {
    {
        "foo", 1
    },
    {
        "bar", 2
    },
    {
        "baz", 3
    }
};

如果你想要一个全局指针,那么使用一个全局指针:

struct A *b;

int main()
{
    b = malloc(sizeof(*b) * 10);

    // do stuff

    free(b);
    return 0;
}

答案 1 :(得分:2)

在您的程序中,您可以考虑将此语句struct A *b = malloc(10*sizeof(struct A));修改为struct A b[10];,其余程序可以相同。