tout le monde.C pointeurs de langue: int ** Vs. int (* g) []
j'utiliser Visual Studio 2013 (C++) et définit un tableau 2D de la fonction principale:
int _tmain(int argc, char **argv)
{
int g[3][3] = { { 1, 2, 3, }, { 4, 5, 6, }, { 7, 8, 9, }, };
...
return 0;
}
puis, I définie une fonction dans Définition 1:
Définition 1:
void print_array(int **arr, int kx, int ky)
{
for (int i = 0; i < kx; i++) {
for (int j = 0; j < ky; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
Je souhaite appeler cette fonction à partir de la fonction principale:
int _tmain(int argc, char **argv)
{
int g[3][3] = { { 1, 2, 3, }, { 4, 5, 6, }, { 7, 8, 9, }, };
print_array(g, 3, 3);
return 0;
}
Le studio visuel me dit que:
Error 1 error C2664: 'void print_array(int **,int,int)' : cannot convert argument 1 from 'int [3][3]' to 'int **'
Je sais aussi une autre méthode de définition:
Define 2
void print_array(int (*arr)[3], int kx, int ky)
{
for (int i = 0; i < kx; i++) {
for (int j = 0; j < ky; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
Maintenant, cela fonctionne. Ma question est: je me suis souvenu avant qu'ils (Define 1 et Define 2) travaillé à la fois dans le vieux compilateur, nommé vous pouvez passer le nom du tableau comme int **
ou int (*p) []
correctement à une autre fonction. Cependant, dans Visual Studio C++ ce n'est pas le cas. Visual Studio C++ est-il beaucoup plus strict que les autres compilateurs? Ou j'ai fait quelque chose de mal?
Merci beaucoup!
Les tableaux ne sont pas des pointeurs. Les pointeurs ne sont pas des tableaux. – EOF
"* vous pouvez passer le nom du tableau comme int **' ou 'int (* p) []' * "vous n'aviez probablement pas activé ou simplement ignoré les autres avertissements du" * ancien * ". * Ou * votre mémoire vous trompe ... ;-) – alk
Possible duplicate de [Pourquoi ne pouvons-nous pas utiliser le double pointeur pour représenter les tableaux bidimensionnels?] (Https://stackoverflow.com/questions/4470950/why- cant-we-use-double-pointer-à-représenter-two-dimensional-arrays) –