2014-11-04 17 views
5

Lúc đầu, tôi đã cố gắng để khởi tạo một cấu trúc như thế này:Tại sao tôi cần nhiều dấu ngoặc nhọn hơn khi khởi tạo cấu trúc này?

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

Nhưng điều đó mang lại cho tôi một trình biên dịch cảnh báo về việc thiếu niềng răng, vì vậy tôi sử dụng nhiều hơn niềng răng theo đề nghị của trình biên dịch và kết thúc với điều này:

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

Không cảnh báo. Tại sao tôi cần thêm niềng răng?

+5

Không phải là một bên ngoài cho cấu trúc và nội một cho mảng char đó là bên trong nó? – Wookie88

+0

Đó là cảnh báo chứ không phải lỗi. Trình biên dịch không phải là "đòi hỏi" bất cứ điều gì. –

+2

trùng lặp [Ý nghĩa của cặp dấu ngoặc kép khởi tạo C-struct là gì?] (Http://stackoverflow.com/questions/6251160/what-is-the-meaning-of-double-curly-braces-initializing- ac-struct)? – nicael

Trả lời

10

Bạn có một mảng cấu trúc, cấu trúc có một thành viên là một mảng.

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}} 
}; 

Có lẽ nó dễ dàng hơn để xem nếu struct của bạn đã có một thành viên khác:

struct { 
     int id; 
     char age[2]; 
    } studage[] = { 
     {1, {23, 56}}, 
     ^^^
     id | | 
      age[0] | 
       age[1] 
    }; 
Các vấn đề liên quan