简体   繁体   English

struct数组的赋值

[英]Assignment of struct array

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

Is there another way to assign the struct array without having so much code?有没有另一种方法可以在没有这么多代码的情况下分配结构数组? Maybe sth like也许……喜欢

    extern struct aStruct aStruct_table[4] = {{0,0x0,0x130},
                                             {1,0x140,0x860},
                                             {4,0x2050,0x1950},
                                             {7,0x6000,0x666}};

You are mixing up assignment and initialization, I guess.我猜你是在混淆赋值和初始化。

In modern C, AKA C99, the best way to do initialization of a struct is with "designated initializers"在现代 C,AKA C99 中,初始化struct的最佳方法是使用“指定的初始化程序”

struct aStruct A = { .val1 = 0, .val2 = 0x0A };

and the syntax for arrays of structs is just to repeat that:结构数组的语法只是重复:

struct aStruct B[] = {
   { .val1 = 0, .val2 = 0x0A },
   { .val1 = 2, .val2 = 0x0B }
};

But you shouldn't do it with the extern in front.但是你不应该用前面的extern来做。 That one is for the forward declaration in the header file without the initialization part.那个是头文件中没有初始化部分的前向声明。

If you really meant assignment, for struct you can use "compound literals如果您的意思是赋值,那么对于struct您可以使用“复合文字

A = (struct aStruct){ .val1 = 0, .val2 = 0x0A };

but as you probably know there is no assignment syntax for arrays.但是您可能知道数组没有赋值语法。

Yes, it is perfectly legal to do that.是的,这样做是完全合法的。

With C99 initializers it can be even clearer:使用 C99 初始值设定项,它甚至可以更清楚:

extern struct aStruct aStruct_table[4] = {
    [0] = {
        .val1 = 0,
        .val2 = 0x0,
    },
    [1] = {
// etc etc

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM