Comment puis-je passer une référence à un tableau à deux dimensions à une fonction?
Je suis en train de passer une référence à un tableau à deux dimensions à une fonction en C++. Je sais que la taille de ces deux dimensions au moment de la compilation. Voici ce que j'ai en ce moment:
const int board_width = 80;
const int board_height = 80;
void do_something(int[board_width][board_height]& array); //function prototype
Mais cela ne fonctionne pas. J'obtiens cette erreur de g++:
error: expected ‘,’ or ‘...’ before ‘*’ token
Que fait cette erreur, et comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Si vous connaissez la taille au moment de la compilation, cela fera:
De le faire avec
Vont passer un pointeur vers le premier sous-ensemble du tableau à deux dimensions ("board_width" est complètement ignoré, comme avec le cas dégénéré de n'avoir qu'une dimension lorsque vous avez
int array[]
acceptant un pointeur), qui n'est probablement pas ce que vous voulez (parce que vous l'avez explicitement demandé une référence). Ainsi, de le faire avec la référence, en utilisant sizeof sur le paramètresizeof array
donnerasizeof(int[board_width][board_height])
(comme si vous le feriez sur l'argument lui-même) tout en le faisant avec la seconde méthode (déclarant le paramètre sous forme de tableau, ce qui rend le compilateur de le transformer en un pointeur) permet d'obtenir lasizeof(int(*)[board_height])
, donc simplement la sizeof d'un pointeur.Bien que vous pouvez passer une référence à un tableau, car les tableaux de décroissance de pointeurs dans les appels de fonction quand ils ne sont pas liés à un des paramètres de référence et vous pouvez utiliser des pointeurs comme des tableaux, il est plus courant d'utiliser des tableaux dans les appels de fonction comme ceci:
ou, de manière équivalente
L'intérieur de la fonction, arr peuvent être utilisées de la même façon que si la déclaration de la fonction ont été:
Le seul cas où cela ne tient pas, c'est quand la fonction appelée besoins statiquement vérifié garantie de la taille de la première index de tableau.
Vous pourriez vouloir essayer cdecl ou c++decl.
Syntaxe n'est pas correcte.
Permet de prendre un exemple de Tableau 1D
De sorte que vous pouvez faire de même pour le tableau 2D comme indiqué ci-dessous
Je pense que c'est ce que vous voulez:
Vous ne pouvez pas passer un tableau de références à une fonction.