Transmission de tableaux multidimensionnels en C et C
En C et C, les tableaux de type int4 ne peuvent pas être directement transmis aux fonctions attendant des tableaux de int*. Cette incompatibilité découle de la différence fondamentale dans la façon dont ces deux langages gèrent les tableaux multidimensionnels.
En C, un nom de tableau multidimensionnel se désintègre en un pointeur vers son premier élément, permettant l'implémentation illustrée dans l'extrait de code. Cependant, en C , les tableaux conservent leur type même lorsqu'ils sont utilisés dans des appels de fonction, ce qui entraîne le message d'erreur rencontré :
cannot convert `int (*)[4]' to `int**' for argument `1' to `void print(int**, int, int)'
Solution pour C et C
To transmettre un tableau multidimensionnel à une fonction à la fois en C et en C , une technique connue sous le nom d'arithmétique de pointeur est employé :
Modifié Code
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((int **)a, 4, 4); }
Remarque importante
Le code se compile et s'exécute avec succès en C et en C . Cependant, des corrections supplémentaires ont été apportées à l'instruction printf pour garantir un accès correct aux éléments du tableau en utilisant arr[i][j] au lieu de *((arr i) j).
Rappelez-vous, l'impossibilité de transmettre des tableaux multidimensionnels découle directement du comportement distinct des tableaux en C et C et doit être abordé en conséquence.
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!