Maison >développement back-end >C++ >Pourquoi le passage d'un tableau 2D de style C à une fonction attendant `int` ne fonctionne-t-il pas en C ?

Pourquoi le passage d'un tableau 2D de style C à une fonction attendant `int` ne fonctionne-t-il pas en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-21 03:07:131092parcourir

Why Doesn't Passing a C-Style 2D Array to a Function Expecting `int` Work in C  ?

Pourquoi passer un tableau multidimensionnel de style C à une fonction prenant un tableau de int* échoue en C

Problème :

En C, passer un tableau multidimensionnel de style C à une fonction attendant un tableau de int* aboutit à un compilateur erreur.

Raison :

Un tableau multidimensionnel comme int4 n'est pas directement convertible en un pointeur de type int*, c'est ce que int arr [] représente dans la fonction déclaration.

Exemple :

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

int main() {
    int a[4][4] = {{0}};
    print(a, 4, 4); // Error in C++
}

C signalera une erreur :

cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'

Solution :

En C et C , passer un tableau multidimensionnel comme int** n'est pas valide. Pour y parvenir efficacement, le tableau doit être converti en pointeur à l'aide de la technique suivante :

  • Initialisez le tableau à une valeur différente (par exemple, {1}) pour vérifier que C n'a pas négligé le tableau. passage bug.
  • Modifiez l'instruction printf pour accéder correctement aux éléments en utilisant ((arr i) j) ou arri.
  • Utilisez la solution de contournement présentée dans le fil de discussion Stack Overflow "Conversion de tableaux multidimensionnels en pointeurs en c".

Remarque :

Ignorer les avertissements du compilateur ou ne pas implémenter la conversion appropriée peut entraîner un comportement indéfini et imprévisible résultats.

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