初始化结构表用C

问题描述:

我有,我想在我的程序初始化结构表用C

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

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

我怎么做的开始初始化结构表?

+0

它是否必须是一个可变长度数组?如果可以使用静态或全局阵列(即它定义为在编译单元的水平,具有固定'#define'长度,而不是'N'),它将被初始化为'0'。否则,在使用之前手动将其设置为“0”。请注意,本地VLA变量通常放在堆栈中,因此在嵌入式环境中,您可能需要小心分配多少。 – Groo

你不能做到这一点使用数组初始化因为n在编译时已知;即你有一个可变长度数组

的一种方法是循环在struct数组的每个元素,并手动初始化成员。它会弹出几行很好。

另外,假设这样的struct元件的C标准保证连续性,并memset 0是定义明确的初始化一个C struct的方式,你memset整个阵列:

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

既然你有:

int n = 100; 
MyStructT Table[n]; 

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

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

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

请注意,更改nconst int n = 100;不使用C帮助(虽然它会在C++ - 但C++不支持VLAS无论如何,尽管GCC让他们)。

如果需求是设置元素的所有字节零,那么你可以写:

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

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

或者,如果您确实不需要VLA,请将数组绑定到enum#define常量,然后您可以使用常规技术初始化阵列。

+0

如果我不初始化我的表是否有任何错误风险? – MrsIl

+3

没有错误,除非你在写信给他们之前调皮和阅读元素。 – Bathsheba

+0

'sizeof(Table)'= flashy = upovote。我用这种表示法变得越来越乏味。 – Bathsheba