Maison  >  Article  >  développement back-end  >  Comment transmettre correctement les références aux tableaux bidimensionnels en C ?

Comment transmettre correctement les références aux tableaux bidimensionnels en C ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-07 04:59:02318parcourir

How to Correctly Pass References to Two-Dimensional Arrays in C  ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn