我有结构表,我想在程序的开头初始化
typedef struct MyStructT{
int Output;
int Input1;
int Input2;
};
int n=100;
MyStructT Table[n] = ?? ;
我该怎么办?
答案 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
常量,然后使用常规技术初始化数组。