PDA

Visualizza la versione completa : [C++] Differenze tra puntatori (*) e reference (&)


Ed_Bunker
17-11-2006, 18:07
Cos'altro differenzia puntatori e reference oltre al fatto che questi ultimi necessitano di inizializzazione e che nell'utilizzarli non occorre anteporre nessun simbolo per effettuare dereferenziazione ?

Il simbolo & se utilizzato nel membro (!) destro di un assegnamento assume lo stesso significato di quello assunto in C ?

thks

Ed_Bunker
24-11-2006, 09:04
Uppete

XWolverineX
24-11-2006, 15:49
Ottima domanda.
Però non so la risposta.
Perchè introdurre i reference?

Ed_Bunker
24-11-2006, 17:36
Penso che serva principalmente per poter fare in modo che piu' variabili puntino lo stesso oggetto senza bisogno di utilizzare l'operazione di deferenziazione.
Inoltre un reference e' per "definizione" costante (Infatti necessita di inizializzazione).

Una volta definito puo' essere utilizzato "in sostituzione" della variabile della quale e' un riferimento (Senza bisogno di * come accade con i puntatori).
Difatti i reference introducono il "concetto" di aliasing.

Ad esempio:



int v = 10;
int &varRef1 = v;
int &varRef2 = v;

v +=1;//v vale 11
varRef1+=2;//v vale 13
varRef1+=3;//v vale 16
v = 0;//v vale 0


Mi ha un po' sorpreso perche' rispetto al C l'operatore e' utilizzato in maniera sostanzialmente differente.
Se qualcuno volesse chiarirci ulteriormente le ide...
:)

Lak3d
24-11-2006, 19:26
il mio manuale di c++ lo tratta soltanto come sostituzione dei puntatori per passare un parametro per riferimento... :master:

Ed_Bunker
24-11-2006, 20:18
Originariamente inviato da Lak3d
il mio manuale di c++ lo tratta soltanto come sostituzione dei puntatori per passare un parametro per riferimento... :master:
Difatti e' utile proprio per far quello.
Viene detto anche "indirizzamento semplice".

XWolverineX
24-11-2006, 20:45
altrimenti può essere usato per evitare di scrivere continuamente

[code]
*Miacosa
[/code

e scrivere direttamente il suo nome.
Insomma, una cafonata.

Lak3d
24-11-2006, 23:11
Originariamente inviato da Ed_Bunker
Difatti e' utile proprio per far quello.
Viene detto anche "indirizzamento semplice".

Ah, ok, soltanto che non capivo cosa volessi indicare con quelle righe di codice che hai postato.
Effettivamente ho notato pure io che non c'è l'operatore di deriferimento *, ma non mi son chiesto il perchè... :biifu:

infinitejustice
25-11-2006, 01:18
1. Le reference vanno inizializzate subito.
int *punt; //ok
int *punt = &x; //ok
int &ref; //error: references must be initialized
int &ref = x; //ok

2. Una reference non può essere inizializzata a 0 (NULL).

3. Un puntatore ha un indirizzo di memoria proprio. Le reference non hanno indirizzo di memoria e non possono essere quindi puntate (ma si può puntare al valore ad esse associato).
int x, *p = &x, &r = x;
std::cout << &x; //indirizzo di x
std::cout << &p; //indirizzo di p
std::cout << &r; //indirizzo di x

4. Una reference non può essere né const né volatile sebbene possa al contrario indirizzare una variabile qualificata in tal modo. Non può inoltre 'puntare' a void.

Nn mi viene in mente altro :master:

Lak3d
25-11-2006, 02:06
inizializzate? io le uso soltanto come parametri di funzione...

Loading