Come faccio a passare un riferimento a un array bidimensionale a di una funzione?

Sto cercando di passare un riferimento a un array bidimensionale a di una funzione in C++. So che le dimensioni di entrambe le dimensioni in fase di compilazione. Qui è quello che ho adesso:

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

Ma questo non funziona. Ricevo questo errore da g++:

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

Che cosa significa questo errore significa e come posso risolvere il problema?

InformationsquelleAutor | 2008-12-31

 

5 Replies
  1. 35

    Se si conosce la dimensione in fase di compilazione, questo farà:

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

    Facendo con

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

    Effettivamente passare un puntatore al primo sub-array di array a due dimensioni (“board_width” è completamente ignorato, come con il caso degenerato di avere solo una dimensione quando si hanno int array[] accettare un puntatore), che probabilmente non è quello che si vuole (perché avete chiesto esplicitamente un riferimento). Così, di farlo con il riferimento, utilizzando sizeof sul parametro sizeof array sarà resa sizeof(int[board_width][board_height]) (come se si volesse fare sull’argomento stesso) mentre si fa con il secondo metodo (che dichiara il parametro array, rendendo il compilatore trasformare un puntatore) sarà resa sizeof(int(*)[board_height]), quindi solo il sizeof di un puntatore.

  2. 23

    Anche se è possibile passare un riferimento ad un array, perché gli array di decadimento di puntatori a funzione chiamate quando non sono legati a parametri di riferimento ed è possibile utilizzare i puntatori come matrici, è più comune l’uso di matrici di chiamate di funzione come questa:

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

    o, equivalentemente,

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

    All’interno della funzione, arr può essere utilizzato nello stesso modo come se la funzione di dichiarazione:

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

    L’unico caso in cui questo non sia in possesso è quando la funzione chiamata ha bisogno di un staticamente controllato la garanzia di le dimensioni del primo indice dell’array.

  3. 6

    Si potrebbe desiderare di provare 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
    • originale risposta.
    • Questo è disponibile anche online: cdecl.org
  4. 1

    Sintassi non è corretta.

    Consente di dare un esempio di 1D Array

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

    Così si può fare lo stesso per la matrice 2D, come illustrato di seguito

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

    Penso che questo è ciò che si vuole:

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

    Non è possibile passare un array di riferimenti a una funzione.

    • in contraddizione con la risposta migliore
    • non È possibile passare un array di riferimenti a una funzione. e ‘ Vero, ma si può passare un riferimento ad un array.

Lascia un commento