2012-11-10 3 views
1

Je ne comprends pas tout à fait où l'erreur est ici:Tableau de pointeurs et pointeur vers un tableau de pointeurs

int *parr[22]; // Array of int* pointers 
parr[0] = ptr1; 
parr[1] = ptr2; 
//... 

int *(*pparr)[22]; // A pointer to a int* array[22] 
pparr = parr; // ERROR 

l'erreur me dit error C2440: '=' : cannot convert from 'int *[22]' to 'int *(*)[22]'

comment se fait que les types ne sont pas égaux? Le nom du tableau doit être égale à une référence au premier élément du tableau, quelque chose comme

parr => &parr[0] 

donc la ligne me semble juste

+1

Vous voulez http://stackoverflow.com/a/6130884/315052 – jxh

+0

Doit être '' pparr = &parr; pour les types soient compatibles. –

Répondre

1

Comme pparr est A pointer to a int* array[22] si vous devez écrire

pparr = &parr; 

Vous devez stocker l'adresse dans le pointeur et non le pointeur lui-même.

Il est même que lorsque vous avez

int a=3; 
int *b; 
b=&a; 

Vous stockez l'adresse d'un en b, vous avez besoin de la même pour stocker l'adresse de parr dans pparr

EDIT: Pour clarifier le commentaire OP

Vous ne pouvez pas affecter l'adresse du premier élément, mais l'adresse du pointeur qui pointe vers le premier élément (donc pparr = &parr;)

+0

Oui mais le nom du tableau doit être égal à une référence au premier élément du tableau, donc je devrais déjà avoir l'adresse –

+0

c'est pourquoi nous n'écrivons pas 'pparr = & parr [0]' nous écrivons 'pparr = & parr' – Ankur

1

Un int*[22] peut se désintégrer à un int**, mais vous ne pouvez pas attribuez un int** à un int*(*)[22].

0
int *(*pparr)[22]; //This one is an array of function-pointers returning an int pointer. 

int **pptr; //Points to an array of pointer 

Vous pouvez écrire

pptr = parr;