在C中初始化结构表

时间:2017-08-04 07:15:45

标签: c

我有结构表,我想在程序的开头初始化

typedef struct MyStructT{
    int     Output; 
    int     Input1;
    int     Input2;

}; 
int n=100;
MyStructT Table[n] = ?? ;

我该怎么办?

2 个答案:

答案 0 :(得分:3)

由于n在编译时未知,因此无法使用数组初始化执行此操作;即你有一个可变长度数组

一种方法是遍历struct数组的每个元素,并手动初始化成员。它会在几行中很好地出现。

或者,假设C标准保证struct元素的连续性,并且memset为0是一种定义良好的初始化C struct的方法,那么可以 memset整个数组:

memset (Table, 0, n * sizeof(struct MyStructT));

答案 1 :(得分:3)

因为你有:

int n = 100;
MyStructT Table[n];

你有一个VLA - 可变长度数组。您无法初始化VLA。期。你必须编写代码将它们设置为初始值,不知何故。

标准(ISO / IEC 9899:2011 - C11)在§6.7.9初始化中说明:

  

¶3要初始化的实体的类型应为未知大小或完整的数组   不是可变长度数组类型的对象类型。

请注意,将n更改为const int n = 100;对C没有帮助(尽管它会在C ++中使用 - 但C ++不支持VLA,尽管GCC允许它们。)

如果要求将元素设置为所有字节为零,那么您可以写:

memset(Table, '\0', sizeof(Table));

将完成这项工作。请注意,sizeof(Table)的值在运行时进行评估,因为Table是VLA。

或者,如果您确实不需要VLA,请将绑定的数组更改为enum#define常量,然后使用常规技术初始化数组。