extern struct aStruct aStruct_table[4];
int main()
{
aStruct_table[0].val1 = 0;
aStruct_table[0].val2 = 0x0;
aStruct_table[0].val3 = 0x130;
aStruct_table[1].val1 = 1;
aStruct_table[1].val2 = 0x140;
aStruct_table[1].val3 = 0x860;
aStruct_table[1].val1 = 4;
aStruct_table[1].val2 = 0x2050;
aStruct_table[1].val3 = 0x1950;
aStruct_table[1].val1 = 7;
aStruct_table[1].val2 = 0x6000;
aStruct_table[1].val3 = 0x666;
}
是否有另一种方法来分配struct数组而没有这么多代码? 也许......好像
extern struct aStruct aStruct_table[4] = {{0,0x0,0x130},
{1,0x140,0x860},
{4,0x2050,0x1950},
{7,0x6000,0x666}};
答案 0 :(得分:4)
我猜你正在混淆任务和初始化。
在现代C,AKA C99中,初始化struct
的最佳方法是使用“指定初始值设定项”
struct aStruct A = { .val1 = 0, .val2 = 0x0A };
和结构数组的语法只是重复:
struct aStruct B[] = {
{ .val1 = 0, .val2 = 0x0A },
{ .val1 = 2, .val2 = 0x0B }
};
但你不应该使用前面的extern
。那个是在没有初始化部分的头文件中的前向声明。
如果你真的想要分配,struct
可以使用“复合文字
A = (struct aStruct){ .val1 = 0, .val2 = 0x0A };
但是您可能知道数组没有赋值语法。
答案 1 :(得分:3)
是的,这样做是完全合法的。
使用C99初始化程序,它可以更清晰:
extern struct aStruct aStruct_table[4] = {
[0] = {
.val1 = 0,
.val2 = 0x0,
},
[1] = {
// etc etc