& c++
ho letto che con l'operatore & si dovrebbe accedere all indirizzo di memoria della varia che segue il simbolo&
però nel seguente programma & è usato dopo una variabile che nella riga prima ha un valore assegnato, quindi in questo caso succede che restituisce il valore di quella variabile, non l'indirizzo della variabile, non capisco questo passaggio, restitusce l'indirizzo o il valore assegnato? se restituisce il valore assegnato che differenza c'è tra usare & o * ?
grazie a tutti
// operatori * e &
2 #include
3 using namespace std;
4
5 int main(){
6 float *fp, fn=3.5;
7 fp=&fn;
8 cout << *fp << endl;
9 *fp=2.4;
10 cout << fn << endl;
11 ret
però nel seguente programma & è usato dopo una variabile che nella riga prima ha un valore assegnato, quindi in questo caso succede che restituisce il valore di quella variabile, non l'indirizzo della variabile, non capisco questo passaggio, restitusce l'indirizzo o il valore assegnato? se restituisce il valore assegnato che differenza c'è tra usare & o * ?
grazie a tutti
// operatori * e &
2 #include
3 using namespace std;
4
5 int main(){
6 float *fp, fn=3.5;
7 fp=&fn;
8 cout << *fp << endl;
9 *fp=2.4;
10 cout << fn << endl;
11 ret
Risposte
Ciao! Ti spiace modificare il tuo messaggio usando i tag per il codice? In questo modo lo rendi più facile da leggere.
Venendo al tuo problema, alla riga 6 dichiari due variabili, una di tipo [inline]float*[/inline] (puntatore a [inline]float[/inline]) che si chiama [inline]fp[/inline] e una di tipo [inline]float[/inline] che si chiama [inline]fn[/inline].
Dopo di che dici che il valore di [inline]fn[/inline], cioè il valore del puntatore, cioè l'indirizzo del blocco di memoria puntato, è uguale ad [inline]&fn[/inline] (indirizzo di [inline]fn[/inline]). Alla riga 8 stampi il valore [inline]*fp[/inline] (il valore puntato da [inline]fp[/inline]) e alla riga 9 lo riassegni.
Dalla riga 7 in avanti hai che [inline]*fp[/inline] è la stessa cosa di [inline]fn[/inline].
Tieni a mente che la dichiarazione [inline]float* fp[/inline] ti dice che [inline](float*) fp[/inline], cioè [inline]fp[/inline] è di tipo [inline]float*[/inline], ma anche che [inline]float (*fp)[/inline], cioè [inline]*fp[/inline] è di tipo [inline]float[/inline].
È più chiaro adesso?
Venendo al tuo problema, alla riga 6 dichiari due variabili, una di tipo [inline]float*[/inline] (puntatore a [inline]float[/inline]) che si chiama [inline]fp[/inline] e una di tipo [inline]float[/inline] che si chiama [inline]fn[/inline].
Dopo di che dici che il valore di [inline]fn[/inline], cioè il valore del puntatore, cioè l'indirizzo del blocco di memoria puntato, è uguale ad [inline]&fn[/inline] (indirizzo di [inline]fn[/inline]). Alla riga 8 stampi il valore [inline]*fp[/inline] (il valore puntato da [inline]fp[/inline]) e alla riga 9 lo riassegni.
Dalla riga 7 in avanti hai che [inline]*fp[/inline] è la stessa cosa di [inline]fn[/inline].
Tieni a mente che la dichiarazione [inline]float* fp[/inline] ti dice che [inline](float*) fp[/inline], cioè [inline]fp[/inline] è di tipo [inline]float*[/inline], ma anche che [inline]float (*fp)[/inline], cioè [inline]*fp[/inline] è di tipo [inline]float[/inline].
È più chiaro adesso?