2011-12-17 80 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