Disponible la nueva versión "donationware" 7.3 de OrganiZATOR
Descubre un nuevo concepto en el manejo de la información.
La mejor ayuda para sobrevivir en la moderna jungla de datos la tienes aquí.

Curso C++

[Home]  [Inicio]  [Índice]


4.5.6  Matrices de estructuras

§1  Sinopsis

Además de las estructuras anidadas ya mencionadas (estructuras cuyos miembros son estructuras 4.5.1), también es posible disponer matrices cuyos miembros son estructuras:

struct loc { int piso; char habit; char nombre[30]; } ;
struct loc hotel[5];

La primera línea define un tipo de estructura loc con tres miembros (un int; un char, y una matriz de 30 char); la segunda declara una matriz, hotel de 5 elementos cuyos miembros son estructuras de tipo loc.


§2  La declaración puede hacerse en una sentencia:

struct loc { int piso; char habit; char nombre[30]; } hotel[5];

e incluso de forma anónima ( 4.5.1), aunque de este modo perderíamos la posibilidad de declarar más tarde estructuras "hermanas" de los elementos de hotel:

struct { int piso; char habit; char nombre[30]; } hotel[5];


§3  La inicialización (definición) de la matriz puede hacerse en la misma sentencia siguiendo la norma general para las matrices (Declaración de matrices 4.3.1).

struct { int piso; char habit; char nombre[30]; } hotel[5] = {
  {1, 'A', {'M','a','r','t','i','n','e','z'} },
  {1, 'A', {'G','o','m','e','z'} },
  {1, 'A', {'A','l','v','a','r','e','z'} },
  {1, 'A', {'G','i','r','e','l','a'} },
  {1, 'A', {'T','r','e','s','c','a','s','t','r','o'} },
};

incluso se podría haber economizado alguna información al compilador:

struct { int piso; char habit; char nombre[30]; } hotel[] = {
  1, 'A', {'M','a','r','t','i','n','e','z'} ,
  1, 'A', {'G','o','m','e','z'} ,
  1, 'A', {'A','l','v','a','r','e','z'} ,
  1, 'A', {'G','i','r','e','l','a'} ,
  1, 'A', {'T','r','e','s','c','a','s','t','r','o'} ,
};

el tamaño de hotel puede deducirse de los datos de inicialización. Así mismo, los separadores de los elementos también, porque la propia estructura declarada (un int seguido de un char seguido de un array), hace que el compilador pueda conocer cuando termina una estructura y comienza la siguiente.

§4  Otro ejemplo

struct ficha {
  char* marca;
  int fecha;
  double peso;
} Matriz_de_fichas[]= {
  { "Ford", 1956, 1950 }, { "Mercedes", 1999, 2050 },
};

Observe que en este caso, las matrices alfanuméricas "Ford" y "Mercedes" son externas a las estructuras y por tanto, externas también a la propia matriz_de_fichas de dos estructuras tipo ficha.