Declaraciones de matrices
Una "declaración de matriz” designa la matriz y especifica el tipo de sus elementos. También puede definir el número de elementos de la matriz. Una variable con tipo de matriz se considera un puntero al tipo de los elementos de la matriz.
Sintaxis
declaration
:
declaration-specifiers
optinit-declarator-list
;
init-declarator-list
:
init-declarator
init-declarator-list
,
init-declarator
init-declarator
:
declarator
declarator
=
initializer
declarator
:
pointer
opt direct-declarator
direct-declarator
:
direct-declarator
[
constant-expression
opt ]
Como constant-expression
es opcional, la sintaxis tiene dos formas:
La primera forma define una variable de matriz. El argumento
constant-expression
incluido entre corchetes especifica el número de elementos de la matriz. El elementoconstant-expression
, si existe, debe tener el tipo entero y un valor mayor que cero. Cada elemento tiene el tipo especificado portype-specifier
, que puede ser de cualquier tipo exceptovoid
. Un elemento de matriz no puede ser un tipo de función.La segunda forma declara una variable que se ha definido en otra parte. Omite el argumento
constant-expression
incluido entre corchetes, pero no los corchetes. Solo puede usar esta variante si previamente ha inicializado la matriz, la ha declarado como parámetro o la ha declarado como una referencia a una matriz que se define explícitamente en otra parte del programa.
En ambas formas, direct-declarator
designa la variable y puede modificar el tipo de la variable. Los corchetes ( [ ]
) incluidos detrás de direct-declarator
modifican el declarador de un tipo de matriz.
Se pueden incluir calificadores de tipo en la declaración de un objeto de tipo de matriz, pero estos calificadores se aplican a los elementos en lugar de a la propia matriz.
Puede declarar una matriz de matrices (matriz “multidimensional”) incluyendo detrás del declarador de matriz una lista de expresiones constantes entre corchetes del modo siguiente:
type-specifier
declarator
[
constant-expression
]
[
constant-expression
]
...
Cada constant-expression
entre corchetes define el número de elementos de una dimensión determinada: las matrices bidimensionales tienen dos expresiones entre corchetes, las matrices tridimensionales tienen tres, y así sucesivamente. Puede omitir la primera expresión constante si ha inicializado la matriz, la ha declarado como parámetro o la ha declarado como una referencia a una matriz definida explícitamente en otra parte del programa.
Puede definir matrices de punteros a distintos tipos de objetos mediante declaradores complejos, como se describe en Interpretación de los declaradores más complejos.
Las matrices se almacenan por fila. Por ejemplo, la siguiente matriz consta de dos filas con tres columnas cada una:
char A[2][3];
Las tres columnas de la primera fila se almacenan primero, seguidas de las tres columnas de la segunda fila. Esto significa que el último subíndice es el que más rápidamente varía.
Para hacer referencia a un elemento individual de una matriz, utilice una expresión de subíndice, como se describe en Operadores de postfijo.
Ejemplos
En estos ejemplos se muestran declaraciones de matriz:
float matrix[10][15];
La matriz bidimensional denominada matrix
tiene 150 elementos, cada uno con un tipo float
.
struct {
float x, y;
} complex[100];
Este es un ejemplo de una declaración de una matriz de estructuras. Esta matriz tiene 100 elementos; cada elemento es una estructura que contiene dos miembros.
extern char *name[];
Esta instrucción declara el tipo y el nombre de una matriz de punteros a char
. La definición real de name
aparece en otra parte.
Específicos de Microsoft
El tipo entero necesario para contener el tamaño máximo de una matriz es el tamaño de size_t
.
FIN de Específicos de Microsoft