|
Puedes declarar matrices de hasta cinco dimensiones. Cualquier cosa que puedas declarar con un identificador puede ser declarada en una matriz.
La sintaxis para declarar matrices es la siguiente:
DECLARACION_DE_CADENA: #declare IDENTIFICADOR = array[ ENTERO ][[ ENTERO ]]..[INICIALIZADOR_DE_MATRIZ] | #local IDENTIFICADOR = array[ ENTERO ][[ ENTERO ]]..[INICIALIZADOR_DE_MATRIZ] INICIALIZADOR_DE_MATRIZ: {ELEMENTO_DE_MATRIZ, [ELEMENTO_DE_MATRIZ, ]... } ELEMENTO_DE_MATRIZ: RVALOR | INICIALIZADOR_DE_MATRIZ
Donde IDENTIFICADOR es el nombre del identificador, de hasta 40 caracteres de longitud, y ENTERO es una expresión de coma flotante válida, que se trunca a entero internamente, y que indica el tamaño de la matriz. El INICIALIZADOR_DE_MATRIZ opcional se detalla en la sección "Incializadores de Matrices". He aquí un ejemplo de una matriz no inicializada de una sola dimensión.
#declare Matriz = array[10]
Esta sentencia declara una matriz de diez elementos sin inicializar. Los elementos se referencian como Matriz[0]
y así sucesivamente hasta Matriz[9]
. De momento, el tipo de los elementos es indeterminado. En cuanto inicialices un elemento, todos los demás
sólo podrán ser definidos como del mismo tipo. Cualquier intento de referenciar un elemento indeterminado provoca un error. Por ejemplo:
#declare Matriz = array[10]; #declare Matriz[5] = pigment{White} // el resto de elementos también //deben ser pigmentos #declare Matriz[2] = normal{bumps 0.2} //provoca un error #declare Cosa = Matriz[4] //error: elemento de matriz indefinido
Pueden declararse matrices multidimensionales de hasta cinco dimensiones. Por ejemplo:
#declare Rejilla = array[4][5]
declara una matriz de 4 filas por 5 columnas con veinte elementos. Los elementos se referencian desde Rejilla[0][0]
a Rejilla[3][4]
. Aunque se permite referenciar una matriz completa como una unidad, no puedes referenciar
sólo una dimensión de una matriz multidimensional. Por ejemplo:
#declare Matriz = array[10] #declare Rejilla = array[4][5] #declare OtraMatriz = Matriz //esto es correcto #declare OtraRejilla = Rejilla //y esto también #declare UnaFila = Rejilla[2] //esto es ilegal
Las matrices sin inicializar no consumen mucha memoria aunque sean grandes. Internamente son matrices de punteros, probablemente no más de 4 bytes por elemento. Cuando las inicializas con valores, consumen memoria en función de lo que pongas en sus elementos.
Las directivas #ifdef
y #ifndef
se pueden usar para comprobar si
un elemento específico de la matriz ha sido ya declarado. También existen métodos para determinar el tamaño de una matriz, mira las secciones
dimensions
y
dimension_size
.
Las matrices grandes no consumen mucha memoria si no están incializadas. Internamente son matrices de punteros, así que seguramente usan sólo 4 octetos por elemento. Una vez inicializadas con valores, consumen memoria en función de lo que se ponga en ellas.
Las consideraciones acerca de matrices locales frente a globales son las mismas que con cualquier otro identificador. Observa que esto afecta a toda matriz. No puedes mezclar elementos globales y locales en la misma matriz. Mira en la sección "#declare frente a #local" para más información acerca del alcance de los identificadores..
Como es incómodo inicializar individualmente cada uno de los elementos de una matriz, es posible inicializarlos en el momento de su creación usando la sintaxis del inicializador de matriz. Por ejemplo:
#include "colors.inc" #declare ColoresBandera = array[3] {Red,Yellow,Red}
Las matrices multidimensionales también pueden inicializarse de esta forma. Por ejemplo:
#declare Digitos = array[4][10] { {7,6,7,0,2,1,6,5,5,0}, {1,2,3,4,5,6,7,8,9,0}, {0,9,8,7,6,5,4,3,2,1}, {1,1,2,2,3,3,4,4,5,5} }
Las comas son necesarias para separar elementos y dimensiones, tal como se aprecia en el ejemplo.
|