1

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

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;
}
4

2 回答 2

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;
}
于 2013-02-10T15:04:33.803 回答
2

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

于 2013-02-10T15:07:41.027 回答