2011-12-17 119 views
2
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; 
} 

有没有另一种方法来结构化数组没有太多的代码? 也许就像结构数组的分配

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

回答

3

是的,这是完全合法的。

随着C99初始化它可以更清楚:

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

你有语法完全错误 – 2011-12-17 22:51:50

+0

@JensGustedt我忘记了构造initalizers的点,除了它是完全有效的! – fge 2011-12-17 22:55:04

+0

nope,你的数组没有名字 – 2011-12-17 23:01:13

4

你分配和初始化混合起来,我猜。

在现代C,又名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 }; 

但你可能知道有数组没有分配语法。

+0

是的,有, – fge 2011-12-17 22:57:58

+0

@fge有什么? – 2011-12-17 23:01:32

+0

“数组的赋值语法” – fge 2011-12-17 23:10:43