我知道在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;
}
答案 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];
,其余程序可以相同。