2008-12-31 17 views
22

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:¿Cómo paso una referencia a una matriz bidimensional a una función?

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. Me sale este error desde g ++:

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

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

Respuesta

0

creo que esto es lo que quiere:

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

no se puede pasar un array de referencias a una función.

+1

contradice con la mejor respuesta –

+3

* No se puede pasar un array de referencias a una función. * Es cierto, pero puede pasar una referencia a una matriz. –

30

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

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

Hacerlo con

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

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

6

Es posible que desee intentar 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 
+0

respuesta original. –

+0

Esto también está disponible en línea: https://cdecl.org/ – rvighne

20

Aunque se puede pasar una referencia a un array, ya que las matrices descomposición a los punteros en función llama cuando no están unidos a un parámetros de referencia y se puede utilizar punteros al igual que las matrices, es más común el uso de matrices en las llamadas a funciones como esto:

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

o equivalentemente

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

Dentro de la función, arreglo se puede utilizar en la misma forma como si la declaración de la función fueron:

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

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

0

La sintaxis no es correcta.

permite echar un ejemplo de matriz de 1D

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

lo que puede hacer, como a continuación de matriz 2D

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