PDA

Visualizza la versione completa : [C] Quesito sull'uso di puntatori


D4rkAng3l
20-01-2006, 12:44
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:

unomichisiada
20-01-2006, 12:54
Originariamente inviato da D4rkAng3l
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:
E' molto semplice, gli operatori vengono valutati da destra verso sinistra quindi *&yPtr equivale a *(&yPtr) e &*yPter equivale a &(*yPter). Nel primo caso si prende l'indirizzo della variabile yPtr (che è già un puntatore ma non ti interessa,per te contiene un numero,anche se effettivamnete esso è un indirizzo per te ha poca importanza) e poi si controlla il valore contenuto nella cella puntata da quell'indirizzo, quindi si torna al valore di yPtr senza nulla. Nel secondo caso si prende prima il valore puntato da yPtr (cioè il valore di y) e poi si estrae il suo indirizzo, cioè si torna nuovamnete al valore di yPtr.Ecco perchè sono uguali!! * e & sono operatori inversi quindi applicandoli in cascata si annullano.

Loading