Sicuramente ti sei sbagliato a scrivere, comunque il simbolo dell'operatore "Indirizzo di" è l'ampersand '&'. L'espressione &a restituisce l'indirizzo di memoria in cui è contenuto il valore di a.Originariamente inviato da Hirakeydos il che, a differenza dei normali puntatori, ci permette di non dover aggiungere il simbolo "Indirizzo di" (l'asterisco) ...
Si.Originariamente inviato da Hirakeydos ... ogni volta che passiamo una variabile alla funzione e di ottenere comunque lo stesso effetto (cioè di aver memorizzato l'indirizzo di memoria).
Si, per questo il reference è ritenuto più sicuro, inoltre esso non può essere dichiarato e poi definito in seguito, la memoria viene assegnata al momento della sua dichiarazione. I reference tuttavia non sono esenti da complicazioni, se dovesse succedere ad esempio di assegnare un riferimento ad un'area di memoria allocata dinamicamente è possibile che questa venga rilasciata dopodiché il riferimento non sarà più valido; in tal caso anziché proteggere il codice potrebbe causare dei guai. Allo stesso modo occorre evitare di assegnare riferimenti ad una memoria locale poiché esso potrebbe persistere anche dopo che quella memoria non è più valida:Originariamente inviato da Hirakeydos Ho letto poi in uno dei due link che hai postato che un riferimento punterà sempre alla stessa area di memoria per tutta la durata della sua "vita", mentre un puntatore può puntare a più indirizzi.
Se GetLocalValue() dovesse essere liberata dallo stack, il riferimento non sarà più valido.codice:int& GetLocalValue() { int a; return a; }
Ad ogni modo anche un puntatore lo si può dichiarare come costante, se non è necessario che esso possa puntare a diverse aree di memoria:
Esso punterà per tutta la sua vita a quell'indirizzo di memoria.codice:int * const pa = &a;