Passer des références à des tableaux bidimensionnels en C
En C , passer des références à des tableaux bidimensionnels aux fonctions peut être délicat. Considérez le code suivant :
<code class="cpp">const int board_width = 80; const int board_height = 80; void do_something(int[board_width][board_height]& array); //function prototype</code>
Ce prototype génère une erreur à partir de g :
error: expected ‘,’ or ‘...’ before ‘*’ token
Explication de l'erreur et solution
Cette erreur indique qu'il manque quelque chose à l'endroit où est placé l'astérisque (*). La déclaration de la référence doit plutôt utiliser la syntaxe suivante :
<code class="cpp">void do_something(int (&array)[board_width][board_height]);</code>
En ajoutant des parenthèses autour du tableau, nous créons une référence à l'ensemble du tableau bidimensionnel. Cela permet à la fonction do_something de modifier le tableau directement.
Différences par rapport à la déclaration du pointeur
Notez que cela diffère de la déclaration du paramètre avec un type de pointeur :
<code class="cpp">void do_something(int array[board_width][board_height]);</code>
Dans ce cas, seul un pointeur vers le premier sous-tableau du tableau bidimensionnel est transmis, en ignorant board_width. En effet, les tableaux en C se désintègrent en pointeurs lorsqu'ils sont transmis à des fonctions. Comme une référence est explicitement demandée dans le prototype, cette déclaration est incorrecte.
Calcul de la taille
Lors de l'utilisation d'une référence, sizeof(array) dans la fonction donnera sizeof (int[board_width][board_height]). En revanche, l'utilisation de la déclaration basée sur un pointeur entraînerait sizeof(int(*)[board_height]), qui correspond à la taille d'un pointeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!