2010-07-05 6 views

Répondre

13

Vous devez utiliser plus d'accolades (en fait, elles sont facultatives, mais GCC fait un avertissement ces jours-ci). Voici un exemple:

struct s1 { int a; int b; }; 
struct s2 { int c; struct s1 s; }; 

struct s2 my_s2 = { 5, { 6, 3 } }; 
+0

Facultatif uniquement lorsque le membre 's' est entièrement initialisé (c'est-à-dire tous les membres), nécessaire si vous souhaitez initialiser seulement partiellement la structure. – Clifford

+4

En C99 vous pouvez utiliser la notation suivante qui est plus facile à maintenir et à lire: 'struct s2 my_s2 = {.c = 5, .s = {.a = 6, .b = 3}};' –

0
struct A 
{ 
int n; 
} 

struct B 
{ 
A a; 
} b; 

Vous pouvez initialiser n par l'instruction suivante. Est-ce ce que vous recherchez.

b.a.n = 10; 
+2

Dans les termes utilisés pour définir la langue, qui est un exemple de * affectation * plutôt que * initialisation *. Dans ce contexte, un initialiseur est utilisé uniquement lors de la déclaration d'un objet. – Clifford

1

Nesting de la structure

Vous pouvez initialiser une structure si un champ dans la structure elle-même est une structure

struct add{ 
    int house; 
    char road; 
}; 
struct emp{ 
    int phone; 
    struct add a; 
}; 

struct emp e = { 123456, 23, "abc"}; 
printf("%d %d %c",e.phone,e.a.house,e.a.road);