Pasando matrices multidimensionales en C ++
Si tienes que pasar una matriz multidimensional a una función, las cosas pueden ser un poco peludo. Eso es porque usted no tiene toda la libertad de dejar fuera los tamaños de matriz como lo hace con las matrices unidimensionales. Suponga que tiene esta función:
int addAll (int MyGrid [5] [6]) {int x, y-int suma = 0-de (x = 0- x lt; 5- x ++) {for (y = 0- y lt; 6- y ++) {suma + = MyGrid [x] [y] -}} return SUM-}
Hasta ahora, el encabezado de la función está bien porque estamos declarando explícitamente el tamaño de cada dimensión. Pero es posible que desee hacer esto:
int addAll (int MyGrid [] []) {
o tal vez pasar los tamaños, así:
int addAll (int MyGrid [] [], las filas int, int columnas) {
Pero, por desgracia, al compilar cualquiera de estas dos líneas, se obtiene este error:
declaración de 'MyGrid' como arraymust multidimensionales tienen límites para todas las dimensiones excepto la primera
Eso es extraño: El compilador le está diciendo que usted debe enumerar explícitamente todas las dimensiones, pero está bien si deja el primero en blanco, al igual que con matrices unidimensionales.
Así que eso significa esta locura compilará:
int addAll (int MyGrid [] [6]) {
¿Qué tal eso? La razón es que el compilador trata matrices multidimensionales de una manera especial. Una matriz multidimensional no es realmente una matriz de dos dimensiones, por ejemplo- sino que es un conjunto de una matriz.
Por lo tanto, en el fondo C ++, el compilador trata el comunicado MyGrid [5] [6] como si fuera MyGrid [5]donde cada elemento de la matriz es en sí misma una matriz de tamaño 6. Y tú eres libre de no especificar el tamaño de una matriz unidimensional. Bueno, los primeros paréntesis representan la porción de una dimensión de la matriz. Así que usted puede dejar ese espacio en blanco, como usted puede con otras matrices unidimensionales.
Pero entonces, después de eso, usted tiene que dar la matriz límites. Y tal vez sólo un poco artificial. Pero es C ++, y es la regla: Puede dejar el primer espacio en blanco dimensión en un encabezado de la función, pero debe especificar los tamaños de dimensiones restantes.
Al utilizar matrices multidimensionales, a menudo es más fácil si se piensa en ellos como un matriz de matrices. Luego se utiliza un typedef de modo que, en lugar de ser una matriz de matrices, es una matriz de algún tipo definido por el usuario, como por ejemplo GridRow. Cualquiera de las siguientes cabeceras de función, por ejemplo, es confuso:
int addAll (int MyGrid [] [6]) {int addAll (int MyGrid [] [6], int count) {
Aquí está nuestra recomendación: Utilice un typedef. Así que aquí está una manera más limpia:
typedef int GridRow [6] -INT addAll (GridRow MyGrid [], int tamaño) {int x, y-int suma = 0-de (x = 0- x lt; X Tamaño- ++) {for (y = 0- y lt; 6- y ++) {suma + = MyGrid [x] [y] -}} return SUM-}
los typedef línea define un nuevo tipo llamado GridRow. Este tipo es un conjunto de seis números enteros. Luego, en la función, estás pasando una serie de GridRows.
El uso de este typedef es el mismo que el simple uso de dos soportes, excepto que hace hincapié en que estás pasando un matriz de una matriz - es decir, una matriz en la que cada miembro es en sí mismo una matriz de tipo GridRow.