una referencia recibe que por pasar parametro multiplicacion matriz matrices llenar funciones funcion con como bidimensionales bidimensional arreglos arreglo c++ arrays

c++ - referencia - parametro matriz c



¿Cómo paso una referencia a una matriz bidimensional a una función? (5)

Estoy tratando de pasar una referencia a una matriz bidimensional a una función en C ++. Sé el tamaño de ambas dimensiones en tiempo de compilación. Esto es lo que tengo ahora:

const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]& array); //function prototype

Pero esto no funciona. Obtengo este error de g ++:

error: expected ‘,’ or ‘...’ before ‘*’ token

¿Qué significa este error y cómo puedo solucionarlo?


Aunque puede pasar una referencia a una matriz, porque las matrices decaen a punteros en las llamadas a funciones cuando no están vinculadas a los parámetros de referencia y puede usar punteros al igual que las matrices, es más común usar matrices en llamadas a funciones como esta:

void ModifyArray( int arr[][80] );

o equivalente

void ModifyArray( int (*arr)[80] );

Dentro de la función, arr puede usarse de forma muy similar a como si la declaración de la función fuera:

void ModifyArray( int (&arr)[80][80] );

El único caso en el que esto no se cumple es cuando la función llamada necesita una garantía comprobada estáticamente del tamaño del primer índice de matriz.


Creo que esto es lo que quieres:

void do_something(int array[board_width][board_height]);

No puede pasar una serie de referencias a una función.


Es posible que desee probar cdecl o c ++ decl .

% c++decl c++decl> declare i as reference to array 8 of array 12 of int int (&i)[8][12] c++decl> explain int (&i)[8][12] declare i as reference to array 8 of array 12 of int c++decl> exit


La sintaxis no es correcta

Tomemos un ejemplo de 1D Array

int a[] = {1,2,3}; int (&p) [3] = a;

para que pueda hacer lo siguiente para la matriz 2D

const int board_width = 80; const int board_height = 80; void do_something(int (&array) [board_width][board_height]);


Si conoce el tamaño en tiempo de compilación, esto lo hará:

//function prototype void do_something(int (&array)[board_width][board_height]);

Haciéndolo con

void do_something(int array[board_width][board_height]);

Pasará realmente un puntero a la primera sub-matriz de la matriz de dos dimensiones ("board_width" se ignora por completo, como con el caso degenerado de tener solo una dimensión cuando tienes int array[] aceptando un puntero), que probablemente no sea lo que quiere (porque explícitamente pidió una referencia). Por lo tanto, al hacerlo con la referencia, al usar sizeof en el parámetro sizeof array obtendrá sizeof(int[board_width][board_height]) (como si lo hiciera en el argumento mismo) mientras lo hace con el segundo método (declarando el parámetro como matriz, haciendo que el compilador lo transforme en un puntero) producirá sizeof(int(*)[board_height]) , por lo tanto, simplemente el tamaño de un puntero.