Maison > développement back-end > C++ > 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
Libérer: 2024-11-07 04:59:02
original
400 Les gens l'ont consulté

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>
Copier après la connexion

Ce prototype génère une erreur à partir de g :

error: expected ‘,’ or ‘...’ before ‘*’ token
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal