Matrices multidimensionales en C
El lenguaje de programación C permite matrices multidimensionales. Aquí está la forma general de una declaración de matriz multidimensional:
type name[size1][size2]...[sizeN];
Por ejemplo, la siguiente declaración crea una matriz de enteros tridimensional:
int threedim[5][10][4];
Matrices bidimensionales
La forma más simple de matriz multidimensional es la matriz bidimensional. Una matriz bidimensional es, en esencia, una lista de matrices unidimensionales. Para declarar una matriz de enteros bidimensionales de tamaño [x] [y], debe escribir algo de la siguiente manera:
type arrayName [ x ][ y ];
Dónde type puede ser cualquier tipo de datos C válido y arrayNameserá un identificador C válido. Una matriz bidimensional se puede considerar como una tabla que tendrá x número de filas y y número de columnas. Una matriz bidimensionala, que contiene tres filas y cuatro columnas, se puede mostrar de la siguiente manera:
Por lo tanto, todos los elementos de la matriz a se identifica por un nombre de elemento de la forma a[ i ][ j ], donde 'a' es el nombre de la matriz, y 'i' y 'j' son los subíndices que identifican de forma única cada elemento en 'a'.
Inicialización de matrices bidimensionales
Las matrices multidimensionales se pueden inicializar especificando valores entre corchetes para cada fila. A continuación se muestra una matriz con 3 filas y cada fila tiene 4 columnas.
int a[3][4] = {
{0, 1, 2, 3} , /* initializers for row indexed by 0 */
{4, 5, 6, 7} , /* initializers for row indexed by 1 */
{8, 9, 10, 11} /* initializers for row indexed by 2 */
};
Las llaves anidadas, que indican la fila deseada, son opcionales. La siguiente inicialización es equivalente al ejemplo anterior:
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
Acceso a elementos de matriz bidimensionales
Se accede a un elemento en una matriz bidimensional utilizando los subíndices, es decir, el índice de fila y el índice de columna de la matriz. Por ejemplo
int val = a[2][3];
La declaración anterior tomará el cuarto elemento de la tercera fila de la matriz. Puedes verificarlo en la figura anterior. Revisemos el siguiente programa donde hemos usado un ciclo anidado para manejar una matriz bidimensional:
#include <stdio.h>
int main () {
/* an array with 5 rows and 2 columns*/
int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
int i, j;
/* output each array element's value */
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, a[i][j] );
}
}
return 0;
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8
Como se explicó anteriormente, puede tener matrices con cualquier número de dimensiones, aunque es probable que la mayoría de las matrices que cree sean de una o dos dimensiones.