Declaración de una estructura

STRUCT <nombre> [ <constante> ]
    <declaración de dato> ;
    ...
END

(o bien, si se inicializa la estructura)

STRUCT <nombre> [ <constante> ]
    <declaración de dato> ;
    ...
END = <lista de constantes>

Para declarar una estructura dentro de una sección GLOBAL, LOCAL o PRIVATE se debe poner la palabra reservada STRUCT precediendo a su nombre; tras éste, y entre corchetes, (símbolos [ ]) se deberá indicar el número de registros de la estructura.

Tras la cabecera se declararán todos los datos pertenecientes a la estructura, que conformarán los campos de la misma. Y, por último, para finalizar la declaración debe aparecer la palabra reservada END.

A continuación se muestra un ejemplo de estructura:

STRUCT enemigo[9]
INT energia;
WORD x_inicial,y_inicial;
WORD x_final,y_final;
STRING nombre[15];
END

Al igual que con las tablas, el número de registros se expresa como el número de registro máximo de la estructura, es decir, todas las estructuras tienen desde el registro 0 hasta el indicado entre los corchetes (por ejemplo, la declaración anterior definie una estructura de 10 registros).

Se permite acceder al resgistro 0 de la estructura simplemente con el nombre de la estructura, es decir, que para el compilador enemigo[0].y_final será lo mismo que enemigo.y_final.

Nota: Cada campo de la estructura puede ser una variable o tabla (de cualquier tipo, ver los tipos de datos) u otra estructura completa, con sus diferentes registros y campos.


Inicialización de la estructura.

Si se quiere inicializar la estructura (fijar los valores iniciales de sus campos en los diferentes registros), se deberá poner el símbolo = (asignación) tras la palabra reservada END seguida de una lista de valores.

Si no se inicializa la estructura, todos los campos serán puestos a 0 por defecto. Por ejemplo, si se hace la siguiente declaración:

STRUCT a[2]
b;
c[1];
END = 1,2,3,4,5,6,7,8,9;

Primero se debe tener en cuenta que la estructura a[] tiene 3 registros (desde a[0] hasta a[2]) y en cada registro 3 campos (b,c[0] y c[1]), luego la anterior declaración inicializará la estructura de la siguiente forma:

  a[0].b=1;
  a[0].c[0]=2;
  a[0].c[1]=3;
  a[1].b=4;
  a[1].c[0]=5;
  ...


Inicialización global de los campos.

Si se quiere que todos los registros de la estructura tengan inicialmente los mismos valores para cada campo, se puede inicializar la estructura globalmente.

STRUCT a[2]
b=1;
c[1]=2,3;
END

En el ejemplo anterior, todos los registros de la estructura tendrían inicializado el campo b a 1, c[0] a 2 y c[1] a 3.


Nota: Ver la alineación de datos en memoria, donde se muestra la ocupación de memoria de los diferentes tipos de datos.


Ver: Sintaxis - Declaración de un dato