Arrays multidimensionales

En la última sección, cubrimos los aspectos generales de los arrays y cómo funcionan. Sin embargo, C disponede otro tipo de arrays: los arrays multidimensionales. A continuación se muestra la forma genérica de decalarar un array multidimensional:

tipo nombre[tamaño1][tamaño2]...[tamañoN];

A continuación, se muestra un ejemplo de declaración básico de un array multidimensional:

int foo[1][2][3];

Un segundo ejemplo:

char vocales[1][5] = {
    {'a', 'e', 'i', 'o', 'u'}
}

Arrays Bidimensionales

La forma más simple de array multidimensional es el array bidimensional. Un array bidimensional es prácticamente una lista de matrices unidimensionales. Para declarar un array bidimensional de enteros de tamaño [x] [y], se debería realizar de la siguiente manera:

tipo nombreDelArray [x][y];

Donde tipo puede ser cualquier tipo de C (int, char, long, long long, double, etc.) y nombreDelArray será un identificador válido en C, o variable. Un array bidimensional se puede considerar como una tabla que tendrá [x] número de filas y [y] número de columnas. Un array bidimensional a, que contiene tres filas y cuatro columnas, se conceptualizar así:

En este sentido, cada elemento del array a está identificado de la siguiente forma: a[i][j], donde 'a' es el nombre del array, e 'i' y 'j' son los índices que lo identifican de manera única en 'a'.

A la hora de declarar un array de la siguiente manera, no es necesario poner un valor [ x ]:

char vocales[][5] = {
    {'A', 'E', 'I', 'O', 'U'},
    {'a', 'e', 'i', 'o', 'u'}
};

ya que el compilador sabrá que hay dos dimensiones, pero sí es necesario un valor [ y ].

Inicializar arrays bidimensionales

Se pueden utilizar arrays multidimensionales especificando valores [] entre corchetes para cada fila. A continuación se puede ver un vector con 3 filas y cada fila tiene 4 columnas. Para hacerlo más fácil, se puede obviar el 3 y mantenerlo en blanco, aún así funcionará.

int a[3][4] = {  
   {0, 1, 2, 3} ,   /*  inicializadores para la fila indizada por 0 */
   {4, 5, 6, 7} ,   /*  inicializadores para la fila indizada por 1 */
   {8, 9, 10, 11}   /*  inicializadores para la fila indizada por 2 */
};

Los corchetes internos, que indican la fila deseada, son opcionales. La siguiente inicialización sería equivalente a la del ejemplo anterior:

int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};

Accediendo a elementos en arrays bidimensionale

Se accede a un elemento en una matriz bidimensional utilizando los subíndices, es decir, el índice de fila y el índice de columna del array. Por ejemplo:

int val = a[2][3];

La instrucción anterior accederá al 4º elemento de la 3ª fila de la matriz.

Ejemplo

Intentemos averiguar las calificaciones promedio de un grupo de cinco estudiantes para dos : Matemáticas y Física. Para hacer esto, usamos un array bidimensional llamada grados. Las notas correspondientes a Matemáticas se almacenarán en la primera fila (notas [0]), mientras que las correspondientes a Física se almacenaran en la segunda fila (notas [1]). Declararemos notas como un array bidimensional de enteros y calcularemos las calificaciones promedio obtenidas en cada materia haciendo uso de dos bucles for.