|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
[C] Domanda molto stupida sui puntatori
Ciao, il programmino è questo:
Codice:
#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; } non mi riesce ad entrare...è grave? ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
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
__________________
GPU Compiler Engineer |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2682
|
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
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Aug 2001
Città: San Francisco, CA, USA
Messaggi: 13827
|
Quote:
Considerando che è difficile che userai mai un costrutto del tipo "&*ptr" per me te ne puoi anche sbattere ![]() 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
__________________
GPU Compiler Engineer |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:14.