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'} }
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 ].
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};
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.
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.