Differenza tra un puntatore e un riferimento? [duplicare]

-1

In Java e in altri linguaggi di alto livello, un riferimento conduce a un oggetto.

In C ++, per quanto ne so, un puntatore può anche portare a un oggetto.

Quindi qual è la differenza tra un riferimento che porta a un oggetto e un puntatore che conduce a un oggetto?

    
posta user3150201 07.02.2014 - 14:09
fonte

2 risposte

0

A mio modesto parere è quasi solo una differenza concettuale.

Con pointers gestisci l'indirizzo di memoria diretta. Puoi anche fare alcune operazioni, come iterare su di esso! È chiaramente una roba low level . Quando completi un puntatore, hai bisogno di un indirizzo di memoria. Uno simile (molto simile) al processore stesso. Quindi, per definizioni:

Pointers are variables who points to direct memory addresses.

Bene, così mi è stato detto al college! : D

Con references , d'altra parte, la "lingua" rende tutto il lavoro duro per te! Quando fai riferimento a qualcosa in high-level language , non passi direttamente un indirizzo di memoria alla variabile. Lo passi, ma come un riferimento , a una variabile che non devi preoccuparti di essere un puntatore, un riferimento, un int o che diavolo pensi sarebbe! (Quella parte la mia varia tra le lingue)

Praticamente: la stessa dannata cosa!
Concettualmente: i riferimenti sono un modo mascherato per trattare i puntatori.

    
risposta data 07.02.2014 - 14:44
fonte
0

Sono molto simili; entrambi fanno riferimento alle istanze degli oggetti in memoria, ma il modo in cui la lingua consente di manipolarli è diverso.

In Java, un riferimento punta a un'istanza di oggetto in memoria. È possibile riassegnare questo riferimento in modo che punti in un'altra istanza nella memoria in qualsiasi momento:

SomeObject ref = new SomeObject();
ref.doSomeWork();
...
ref = new SomeObject();

In C ++, un riferimento non può essere riassegnato per puntare a un oggetto diverso - punta sempre alla stessa posizione di memoria.

I puntatori in C ++ sono più simili ai riferimenti Java rispetto ai riferimenti C ++ - puoi cambiare l'oggetto a cui puntano. Sono anche un po 'più flessibili dei riferimenti Java, perché puoi manipolare il puntatore stesso, come incrementarlo per puntare a un altro oggetto in un elenco:

SomeObject* ptr = {instance1, instance2, instance3};
ptr->doSomeWork(); // calls instance1's doSomeWork method
ptr++;
ptr->doSomeWork(); // calls instance2's doSomeWork method

Come sottolineato da @DennisBraga (pun), con i puntatori si ottiene l'accesso all'indirizzo di memoria dell'oggetto, ma con i riferimenti (in Java) non lo si fa. Inoltre, con i puntatori devi dereferenziare in qualche modo per raggiungere l'oggetto, ma con i riferimenti Java questo accade dietro le quinte per te.

    
risposta data 07.02.2014 - 15:00
fonte

Leggi altre domande sui tag