Maison > développement back-end > C++ > Comment puis-je transmettre correctement un tableau multidimensionnel à une fonction en C ?

Comment puis-je transmettre correctement un tableau multidimensionnel à une fonction en C ?

Mary-Kate Olsen
Libérer: 2025-01-01 13:41:10
original
755 Les gens l'ont consulté

How Can I Correctly Pass a Multidimensional Array to a Function in C  ?

Passer un tableau multidimensionnel à une fonction en C

Dans cet extrait de code, une tentative est faite pour passer un tableau multidimensionnel de style C à un fonction qui attend un tableau de pointeurs entiers :

#include<stdio.h>
void print(int *arr[], int s1, int s2) {
    ...
}

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

Ce code se compile en C mais pas en C . Voici pourquoi :

  • En C, un tableau multidimensionnel peut se décomposer en un pointeur vers son premier élément. Cela signifie que le code ci-dessus est équivalent à :
print(&a[0],4,4);
Copier après la connexion
  • En C , cette désintégration n'est pas autorisée.Le Le type de tableau int4 n'est pas implicitement convertible en type de pointeur int**. Ceci explique le message d'erreur :

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

Solution :

Pour passer un tableau multidimensionnel à une fonction en C , il faut explicitement convertir vers un pointeur du type approprié. Ceci peut être réalisé en utilisant la technique suivante :

#include<stdio.h>
void print(int **arr, int s1, int s2) {
    ...
}

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

En convertissant explicitement le tableau en pointeur à l'aide du cast (int )**, le code se compile désormais et se comporte comme prévu dans à la fois C et C.

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 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