Il y a quelques problèmes avec votre code. L'un est en C, l'autre en C++.
Le problème C:
Même en C, votre tableau multidimensionnel int a[n][n]
ne convertit pas à un int**
. Il y a une énorme différence entre les tableaux multidimensionnels déchiquetés (ou dentelés) et les tableaux multidimensionnels contigus. tableaux haillons sont déclarés et attribués comme
int ** jagged_array
Un tableau en dents de scie déclaré dans ce style peut évidemment être passé comme argument int**
à une fonction; il n'y a pas de conversion impliqué. Avec ce type de tableau, le programmeur doit allouer (et éventuellement libérer) du stockage pour un tableau de pointeurs int*
à chacune des rangées du tableau et doit également allouer (et éventuellement libérer) du stockage pour chacune des rangées du tableau.
int * jagged_array[size_spec]
.
Un tableau irrégulier déclaré dans ce style peut également être passé comme argument int**
à une fonction en raison de la manière dont les tableaux se dégradent en pointeurs dans C (et C++). Avec ce type de tableau, le programmeur doit allouer (et éventuellement libérer) du stockage pour chacune des rangées du tableau.
Notez que dans les deux formes, il y a une place explicite en mémoire pour les int*
pointeurs qui pointent vers les éléments Zeroth des lignes du tableau. Ce n'est pas le cas avec les tableaux multidimensionnels. Un pointeur vers une ligne dans un tableau multidimensionnel est calculé, non stocké. Un tableau multidimensionnel déclaré int a[n][n]
ne peut pas se désintégrer en int**
. Il se désintègre plutôt en int*[n]
. En C, une fonction qui reçoit un tableau multidimensionnel de longueur variable tel que votre int a[n][n]
doit être déclarée <return_type> fund (int n, int vla[n][n])
. (L'argument tableau peut également être spécifié comme vla[][n]
; la dimension externe n'est pas nécessaire.)
Le C++ problème:
Vous utilisez des tableaux de longueur variable. C++ ne supporte pas ce concept C99. Ce concept n'existait pas en C avec la version originale 1998 de C++. La norme C++ 2003 était une révision mineure de la norme C++ de 1998, de sorte qu'elle ne passait pas à C99. Les auteurs du plus récent standard C++, C++ 11, ont explicitement rejeté le support de ces tableaux de longueur variable C99. Vous ne pouvez pas utiliser de tableaux de longueur variable en C++, du moins pas de façon portative.
puis comment passer un [n] [n] à la fonction si n est pris à partir de l'utilisateur – rsaisankalp