Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    [C++] Differenze tra puntatori (*) e reference (&)

    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

  2. #2
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Uppete

  3. #3
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ottima domanda.
    Però non so la risposta.
    Perchè introdurre i reference?
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    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:

    codice:
    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...

  5. #5
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    il mio manuale di c++ lo tratta soltanto come sostituzione dei puntatori per passare un parametro per riferimento... :master:

  6. #6
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    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".

  7. #7
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    altrimenti può essere usato per evitare di scrivere continuamente

    [code]
    *Miacosa
    [/code

    e scrivere direttamente il suo nome.
    Insomma, una cafonata.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  8. #8
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    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è...

  9. #9
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    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:
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  10. #10
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    inizializzate? io le uso soltanto come parametri di funzione...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.