struct数组的赋值

时间:2011-12-17 21:39:12

标签: c arrays struct

    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}};

2 个答案:

答案 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