Maison > développement back-end > C++ > Pourquoi ne puis-je pas transmettre un tableau multidimensionnel à une fonction en tant que tableau de pointeurs en C ?

Pourquoi ne puis-je pas transmettre un tableau multidimensionnel à une fonction en tant que tableau de pointeurs en C ?

Patricia Arquette
Libérer: 2024-12-15 15:03:22
original
804 Les gens l'ont consulté

Why Can't I Pass a Multidimensional Array to a Function as an Array of Pointers in C  ?

Comprendre l'incapacité de transmettre des tableaux multidimensionnels aux fonctions

Considérez l'extrait de code suivant :

#include <stdio.h>
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(a, 4, 4);
}
Copier après la connexion

Ce code vise à passer un tableau multidimensionnel a à une fonction print qui prend un tableau de pointeurs int int *arr[]. Cependant, en C , ce code génère l'erreur suivante :

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

Explication :

Le nœud de ce problème réside dans les types de données incompatibles. Un tableau multidimensionnel de style C comme a n'est pas directement convertible en pointeur vers un tableau de pointeurs int *arr[]. En C , le type de données de a est int[4][4], qui représente un tableau bidimensionnel d'entiers. D'autre part, int *arr[] est un pointeur vers un tableau d'entiers, où chaque élément est un pointeur vers un entier.

Solution :

Pour résolvez ce problème et transmettez un tableau multidimensionnel à une fonction prenant un tableau de pointeurs int, vous pouvez modifier le code pour convertir explicitement le tableau multidimensionnel en un tableau de pointeurs. Ceci peut être réalisé en utilisant une technique comme celle décrite dans la réponse acceptée à la question « Conversion de tableaux multidimensionnels en pointeurs en C ».

Notes supplémentaires :

  • Le code présenté dans l'exemple initial présente un comportement inattendu en C en raison d'un bug supplémentaire dans le code d'impression.
  • Il est crucial d'initialiser le tableau a avec des valeurs non nulles pour observer les effets du bug dans le passage du tableau.
  • L'erreur dans le passage du tableau est masquée en C à cause du bug d'impression.
  • Les messages d'erreur C fournissent une indication claire du problème de conversion, tandis que les compilateurs C peuvent émettre des avertissements qui peuvent être ignorés par erreur.

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