Maison > développement back-end > C++ > Comment puis-je transmettre correctement des tableaux multidimensionnels aux fonctions en C et C ?

Comment puis-je transmettre correctement des tableaux multidimensionnels aux fonctions en C et C ?

Mary-Kate Olsen
Libérer: 2024-12-15 00:50:12
original
761 Les gens l'ont consulté

How Can I Correctly Pass Multidimensional Arrays to Functions in C and C  ?

Transmission de tableaux multidimensionnels en C et C

En C et C, les tableaux de type int4 ne peuvent pas être directement transmis aux fonctions attendant des tableaux de int*. Cette incompatibilité découle de la différence fondamentale dans la façon dont ces deux langages gèrent les tableaux multidimensionnels.

En C, un nom de tableau multidimensionnel se désintègre en un pointeur vers son premier élément, permettant l'implémentation illustrée dans l'extrait de code. Cependant, en C , les tableaux conservent leur type même lorsqu'ils sont utilisés dans des appels de fonction, ce qui entraîne le message d'erreur rencontré :

cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Copier après la connexion

Solution pour C et C

To transmettre un tableau multidimensionnel à une fonction à la fois en C et en C , une technique connue sous le nom d'arithmétique de pointeur est employé :

  1. Déclarez le pointeur du tableau comme pointeur vers des pointeurs : int **arr.
  2. Convertissez le nom du tableau en pointeur vers un pointeur de tableau : arr = (int **)a.

Modifié Code

void print(int **arr, int s1, int s2) {
    int i, j;
    for(i = 0; i < s1; i++)
        for(j = 0; j < s2; j++)
            printf("%d, ", arr[i][j]);
}

int main() {
    int a[4][4] = {{0}};
    print((int **)a, 4, 4);
}
Copier après la connexion

Remarque importante

Le code se compile et s'exécute avec succès en C et en C . Cependant, des corrections supplémentaires ont été apportées à l'instruction printf pour garantir un accès correct aux éléments du tableau en utilisant arr[i][j] au lieu de *((arr i) j).

Rappelez-vous, l'impossibilité de transmettre des tableaux multidimensionnels découle directement du comportement distinct des tableaux en C et C et doit être abordé en conséquence.

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