Pourquoi le tableau de pointeurs "équivalence" ne fonctionne-t-il pas dans le cas suivant?pointeurs et tableaux
void foo(int** x) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
merci
Pourquoi le tableau de pointeurs "équivalence" ne fonctionne-t-il pas dans le cas suivant?pointeurs et tableaux
void foo(int** x) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
merci
Le modèle de mémoire de int ** et int [2] [2] est différent.
int a[2][2]
est stocké dans la mémoire comme:
&a : a[0][0]
&a + 4 : a[0][1]
&a + 8 : a[1][0]
&a + 12: a[1][1]
int** x
:
&x : addr1
&x + 4 : addr2
addr1 : x[0][0]
addr1 + 4: x[0][1]
addr2 : x[1][0]
addr2 + 4: x[1][1]
tout addr1
et addr2
sont des adresses juste en mémoire.
Vous ne pouvez pas convertir l'un à l'autre.
Il ne fonctionne pas, car seul le premier niveau du tableau multidimensionnel désintègre à un pointeur. Essayez ceci:
#include <iostream>
using std::cout;
void foo(int (*x)[2]) {
cout << x[0][1];
}
int main() {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
car le type n'est pas int **. ce droit pour la fonction foo
foo (int * [2]);
type de pointeur a n'est pas int **, exactement int * [2] ..
Ce qui ne fonctionne pas? quel message d'erreur obtenez-vous? – Dani
duplication possible de [en C, sont des pointeurs de tableaux ou utilisés comme pointeurs?] (Http://stackoverflow.com/questions/4607128/in-c-are-arrays-pointers-or-used-as-pointers) – ildjarn
tableau de pointeur "équivalence" – user695652