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
Libérer: 2024-12-21 03:07:13
original
1064 Les gens l'ont consulté

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

C signalera une erreur :

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

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!

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