PDA

View Full Version : [C] Domanda molto stupida sui puntatori


D4rkAng3l
20-01-2006, 12:41
Ciao, il programmino è questo:

#include <stdio.h>
#include <stdlib.h>

int main(){

int y = 5; // Dichiara la variabile y
int *yPtr; // Dichaiara un puntatore ad una variabile di tipo intero

yPtr = &y; // Mette l'indirizzo della var y nella var puntatore yPtr

printf("Il valore di y e': %d\n", y);
printf("La locazione di memoria di y (yPtr) e': %p\n", yPtr);
printf("Il valore di &*yPtr e': %p\n", &*yPtr);
printf("Il valore di *&yPtr e': %p\n", *&yPtr);

system("PAUSE");
return 0;
}


Mi potete spiegare perchè &*yPter corrisponde a *&yPtr? (a parolee)

non mi riesce ad entrare...è grave? :cry:

AnonimoVeneziano
20-01-2006, 12:51
Beh, diciamo che a parole è così . Avendo sia & che * lo stesso ordine di precedenza vengono valutati da quello più vicino all' termine su cui devono agire verso l'esterno in questo modo:

&*yPtr è : "L'indirizzo dell' oggetto puntato dall' indirizzo contenuto da yPtr". Che è proprio l'indirizzo di "y" e quindi lo stesso valore contenuto in yPtr.

*&yPtr invece è : "Il valore dell' oggetto puntato dall' indirizzo di yPtr", che è proprio il valore contenuto in yPtr, che è sempre l'indirizzo di "y".

Ergo hai raggiunto lo stesso obbiettivo in 2 modi diversi :)

Nel primo caso il sistema valuta l'indirizzo di "y" con l'operatore "&", nel secondo caso invece viene letto da yPtr, col risultato che alla fine entrambi sono sempre la stessa cosa, ossia l'indirizzo di "y"

Ciao

D4rkAng3l
20-01-2006, 13:00
grazie, sei stato molto chiaro...non sò come sia possibile...sono 2 anni che programmo (anche se devo ancora dare l'esame ehhe)...l'anno scorso avevo anche capito le liste concatenate e sapevo implementalre...ma quel concetto mi ha sempre lasciato nun po' perplesso...non sò se sia normale avere questi dubbi..booo

AnonimoVeneziano
20-01-2006, 13:56
grazie, sei stato molto chiaro...non sò come sia possibile...sono 2 anni che programmo (anche se devo ancora dare l'esame ehhe)...l'anno scorso avevo anche capito le liste concatenate e sapevo implementalre...ma quel concetto mi ha sempre lasciato nun po' perplesso...non sò se sia normale avere questi dubbi..booo


Considerando che è difficile che userai mai un costrutto del tipo "&*ptr" per me te ne puoi anche sbattere :D

Vedi invece di aver compreso costrutti come :

&((*ptr)->membro) . Questi tipi di costrutti con le strutture sono già più importanti (comunque generalmente coi puntatori non si fanno mai cose troppo complesse. Se viene una costruzione coi puntatori troppo complessa allora forse è il caso di ritornare alla progettazione ;) )

Ciao