2012-03-12 78 views
4

我有以下結構:如何初始化結構數組成員用C

typedef struct { 
    int someArray[3][2]; 
    int someVar; 
} myStruct; 

如果我創建這個結構在我的主數組(像下面),我將如何初始化呢?

int main() { 
    myStruct foo[5]; 
} 

我想初始化結構體的方式在上述陣列類似於initilazing正常陣列(見下面):

int main() { 
    int someArray[5] = {1,4,0,8,2}; 
} 
+0

只是因爲一些事情可以做,並不一定意味着你應該做他們。考慮一下從未看過你的代碼的人會如何看待這樣的初始化。 – 2012-03-12 14:47:57

+2

@HunterMcMillen - 在許多情況下,這是比別人更好的選擇。 – MByD 2012-03-12 14:57:21

+0

@BinyaminSharet我只是相信在維護方面,初始化每一部分清楚地評論每一步會更加清楚。你可以舉一個例子,這是首選嗎?沒有人想到我。 – 2012-03-12 15:03:56

回答

24

從外面工作的你知道你有5件事情的數組初始化:

mystruct foo[5] = { 
        X, 
        X, 
        X, 
        X, 
        X 
        }; 

其中X是一臺爲mystruct類型的初始化。所以現在我們需要弄清楚每個X的樣子。的mystruct每個實例有兩個元素,somearraysomevar,所以你知道你的X初始化會像

X = { Y, Z } 

代回原來的聲明中被結構化的,我們現在得到

mystruct foo[5] = { 
        { Y, Z }, 
        { Y, Z }, 
        { Y, Z }, 
        { Y, Z }, 
        { Y, Z } 
        }; 

現在,我們需要弄清楚每個Y的樣子。 Y對應於int的3x2陣列的初始化器。再次,我們可以在從外部的工作,你有一個3元素數組的初始化:

Y = { A, A, A } 

,其中每個陣列元素是int一個2元素的數組:

A = { I, I } 

Subsituting回爲Y,我們得到

Y = { { I, I }, { I, I }, { I, I } } 

代,早成X,我們得到

X = { { { I, I }, { I, I }, { I, I } }, Z } 

現在讓我們

mystruct foo[5] = { 
        { { { I, I }, { I, I }, { I, I } }, Z }, 
        { { { I, I }, { I, I }, { I, I } }, Z }, 
        { { { I, I }, { I, I }, { I, I } }, Z }, 
        { { { I, I }, { I, I }, { I, I } }, Z }, 
        { { { I, I }, { I, I }, { I, I } }, Z } 
        }; 

由於Z是一臺爲一個整數,我們並不需要打破它的任何進一步。只是實際的整數值取代I S和Z秒,你就大功告成了:

mystruct foo[5] = { 
        {{{101, 102}, {201, 202}, {301, 302}}, 41}, 
        {{{111, 112}, {211, 212}, {311, 312}}, 42}, 
        {{{121, 122}, {221, 222}, {321, 322}}, 43}, 
        {{{131, 132}, {231, 232}, {331, 332}}, 44}, 
        {{{141, 142}, {241, 242}, {341, 342}}, 45} 
        }; 
+1

+1:很好的呈現。 – 2012-03-12 18:14:46

0

喜歡的是:

int main() { 
         // someArr initialization | someVar initialization 
    mystruct foo[5] = { { { {1, 2}, {1,2}, {1, 2} }, 1      }, // foo[0] initialization 
         //... 
         }; 
} 
3

裹初始化對於一組花括號中的每個結構元素:

myStruct foo[5] = 
{ 
    { { { 11, 12 }, { 13, 14 }, { 55, 56 }, }, 70 }, 
    { { { 21, 22 }, { 23, 24 }, { 45, 66 }, }, 71 }, 
    { { { 31, 32 }, { 33, 34 }, { 35, 76 }, }, 72 }, 
    { { { 41, 42 }, { 43, 44 }, { 25, 86 }, }, 73 }, 
    { { { 51, 52 }, { 53, 54 }, { 15, 96 }, }, 74 }, 
}; 
+1

我想你可能錯過了第二行的'{'。這與你的回答是一樣的 – 2012-03-12 15:11:43

+0

@BinyaminSharet:GCC對代碼感到滿意。在每條數據線上都有一組平衡的開放和關閉的大括號,在數據行前後的行的起始處使用周圍的「{」和「};」。 – 2012-03-12 15:17:31

+0

的確,我錯過了第一個'{'抱歉。 – MByD 2012-03-12 15:17:40