我有,我想在我的程序初始化結構表用C
typedef struct MyStructT{
int Output;
int Input1;
int Input2;
};
int n=100;
MyStructT Table[n] = ?? ;
我怎麼做的開始初始化結構表?
我有,我想在我的程序初始化結構表用C
typedef struct MyStructT{
int Output;
int Input1;
int Input2;
};
int n=100;
MyStructT Table[n] = ?? ;
我怎麼做的開始初始化結構表?
你不能做到這一點使用數組初始化因爲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類型的實體被初始化應未知大小的陣列或一個完整的 不是可變長度數組類型的對象類型。
請注意,更改n
到const int n = 100;
不使用C幫助(雖然它會在C++ - 但C++不支持VLAS無論如何,儘管GCC讓他們)。
如果需求是設置元素的所有字節零,那麼你可以寫:
memset(Table, '\0', sizeof(Table));
這將做的工作。注意,sizeof(Table)
值是在運行時評估,因爲Table
是VLA。
或者,如果您確實不需要VLA,請將數組綁定到enum
或#define
常量,然後您可以使用常規技術初始化陣列。
它是否必須是一個可變長度數組?如果可以使用靜態或全局陣列(即它定義爲在編譯單元的水平,具有固定'#define'長度,而不是'N'),它將被初始化爲'0'。否則,在使用之前手動將其設置爲「0」。請注意,本地VLA變量通常放在堆棧中,因此在嵌入式環境中,您可能需要小心分配多少。 – Groo