2014-11-04 2 views
5

Сначала я пытался инициализировать структуру, как это:Зачем мне нужно больше фигурных скобок при инициализации этой структуры?

struct { 
    char age[2];  // Hold two 1-Byte ages 
} studage[] = { 
    {23, 56}, 
    {44, 26} 
}; 

Но это дает мне компилятор предупреждает о пропущенных брекеты, так что я использовал больше скобок, как это было предложено компилятором и в конечном итоге с этим:

struct { 
    char age[2];  // Hold two 1-Byte ages 
} studage[] = { 
    {{23, 56}}, 
    {{44, 26}} 
}; 

Предупреждение не было. Зачем нужны дополнительные брекеты?

+5

это не внешние один для структуры и внутренние один для массив символов, который находится внутри него? – Wookie88

+0

Это предупреждение, а не ошибка. Компилятор не «требует» ничего. –

+2

дубликат [Что такое двойные фигурные скобки, инициализирующие C-struct?] (Http://stackoverflow.com/questions/6251160/what-is-the-meaning-of-double-curly-braces-initializing- ac-struct)? – nicael

ответ

10

У вас есть массив структур, структура имеет один элемент, который является массивом.

struct { 
    char age[2];  // Hold two 1-Byte ages 
} studage[] = { 
      ^
     This is for the studage array 
    { { 23, 56}}, 
    ^^ 
    | this is for the age array 
    this is for the anonymous struct 

    {{44, 26}} 
}; 

Возможно, это легче увидеть, если ваша структура имела другой член:

struct { 
     int id; 
     char age[2]; 
    } studage[] = { 
     {1, {23, 56}}, 
     ^^^
     id | | 
      age[0] | 
       age[1] 
    };