如何åˆå§‹åŒ–结构类型的数组?

时间:2013-07-14 17:53:02

标签: c

typedef struct_t struct_array[ROWS][COLS];

int main()
{
    struct_array structArray1 = {0};

}

我收到一æ¡é”™è¯¯æ¶ˆæ¯ï¼Œè¯´åˆå§‹åŒ–程åºå‘¨å›´ç¼ºå°‘大括å·ã€‚我知é“有关于此警告的gcc错误。或者我åšé”™äº†ä»€ä¹ˆï¼Ÿ

3 个答案:

答案 0 :(得分:3)

您需è¦ä½¿ç”¨struct_array structArray1 = {{{0}}};,第一个用于数组的第一维,第二个用于第二维,第三个用于结构åˆå§‹åŒ–。代ç æ˜¯æ­£ç¡®çš„,但你的GCC是错误的,如其他答案所述。

答案 1 :(得分:2)

您的代ç å®Œå…¨æ­£ç¡®ã€‚你也是对的,GCC也有一个错误 - it's described here。

您有几个选择:

  1. æš‚æ—¶åœç”¨-Wmissing-braces。

  2. 使用空的initalizer括å·ï¼ˆGCC扩展å):

    struct_array structArray1 = {};
    
  3. åˆå§‹åŒ–一个完整的对象。对于三元素struct_t,例如:

    struct_array structArray1 = { { { 0, 0, 0 } } };
    
  4. 指定所有必è¦çš„大括å·å’Œé›¶ã€‚å‡è®¾ç»“构类型与上é¢çš„#3相åŒï¼Œå¹¶ä¸”是2x2数组:

    struct_array structArray1 = { { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } },
                                  { { 0, 0, 0 }, { 0, 0, 0 },
                                    { 0, 0, 0 }, { 0, 0, 0 } } };
    
  5. 使用其他编译器。 clang,也许?

  6. ä¿®å¤GCC中的错误。

答案 2 :(得分:1)

å°è¯•ï¼š

int main(){
    struct_t structArray[ROWS][COLS];
    memset(structArray, 0, sizeof(structArray));
}

(memset用零填充)