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); }
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)'
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 :
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!