PDA

View Full Version : C doppi puntatori


SteR9
08-11-2004, 14:28
c'è un esempio sui doppi puntatori che proprio non riesco a capire..


int arr[10];
int x;
int *p1, *p2;
int **pp;
int i;

x=3;
for(i=9; i>=0; i--) arr[i]=10-i;

pp=&p1;
p1=&x;
p2=arr;
*pp=p2+**pp;
printf(**pp+*p2);

*pp=p2+**pp;
nn capisco perchè a questa riga il puntatore **pp prende valore 7.. con *pp indichiamo l'indirizzo di p1?
e con **pp il valore di x?
grazie..

ilsensine
08-11-2004, 14:58
Originariamente inviato da SteR9
*pp=p2+**pp;
nn capisco perchè a questa riga il puntatore **pp prende valore 7..
Aritmetica dei puntatori. Quando sommi un "intero" x a un "puntatore" p, hai come risultato un puntatore che punta a x*sizeof(*p) locazioni di memoria in avanti rispetto al valore precedente.
Nel tuo caso sommi 3 al puntatore al primo elemento dell'array; il risultato netto è un puntatore che punta all'elemento arr[3] (ovvero 7).

ilsensine
08-11-2004, 15:00
Originariamente inviato da SteR9
con *pp indichiamo l'indirizzo di p1?
No, pp è l'indirizzo di p1; *pp è il valore di p1 (ovvero il puntatore/indirizzo di x); **pp è infine il valore di x.

Dove hai trovato questo esempio contorto? Di sicuro non ti aiuta a imparare come funzionano le cose...

gyborg
08-11-2004, 15:01
Edit: gia spiegato da sens! :D

SteR9
08-11-2004, 18:07
Originariamente inviato da ilsensine
No, pp è l'indirizzo di p1; *pp è il valore di p1 (ovvero il puntatore/indirizzo di x); **pp è infine il valore di x.

Dove hai trovato questo esempio contorto? Di sicuro non ti aiuta a imparare come funzionano le cose...
è un problema dell'esame di info1 :D