Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    21

    [C++] Differenza passaggio per riferimento/indirizzo

    Salve, volevo sapere sostanzialmente la differenza che c'è tra i seguenti codici:

    codice:
    #include <iostream>
    
    using namespace std;
    
    void scambia (int &, int & );
    
    int main()
    {
        int a = 5, b = 7;
        
        cout << a << " " << b << endl;
        
        scambia (a, b);
        
        cout << a << " " << b << endl;
        
        return 0;
    }
    
    void scambia (int &a, int &b)
    {
         int c = a;
         
         a = b;
         b = c;
    }
    codice:
    #include <iostream>
    
    using namespace std;
    
    void scambia (int *, int *);
    
    int main()
    {
        int a = 5, b = 7;
        
        cout << a << " " << b << endl;
        
        scambia (&a, &b);
        
        cout << a << " " << b << endl;
        
        return 0;
    }
    
    void scambia (int *a, int *b)
    {
         int c = *a;
         
         *a = *b;
         *b = c;
    }
    svolgono lo stesso compito e se non erro entrambi operano sugli indirizzi delle variabili, ma di preciso qual'è la differenza?

    Grazie in anticipo per le risposte

  2. #2
    In un caso usi i reference, nell'altro i puntatori. Il codice eseguibile generato probabilmente sarà identico, dato che i reference risultano essere dei puntatori nascosti.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,483
    il primo è C++, il secondo C

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da franzauker
    il primo è C++, il secondo C
    codice:
    #include <iostream>
    
    using namespace std;
    Mi sa di no...
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,840
    Originariamente inviato da Ippo343
    codice:
    #include <iostream>
    
    using namespace std;
    Mi sa di no...
    Credo che intendesse dire che i reference si usano in C++ mentre i puntatori è più "roba da C".
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Originariamente inviato da Alex'87
    Credo che intendesse dire che i reference si usano in C++ mentre i puntatori è più "roba da C".
    Ah questa non la sapevo

    La differenza è la comodità.
    Passando un puntatore ogni volta che vuoi il valore devi dereferenziarlo con l'operator*. Invece tramite reference è come se avessi una variabile normale, di cui puoi prenderne il valore senza usare *

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    23
    Ciao ti dirò che se stiamo parlando di c++ (in questo forum pieno di linguaggi si fa sempre un po confusione, è come una torre di Babele!) l'effetto generato è identico: il passaggio per riferimento o per indirizzo (che semanticamente parlando sono la stessa identica cosa), ovvero il primo da te postato (quello che aveva delle ampersand (&) prima deigli identificatori dei parametri effettivi), ha lo stesso identico effetto di quando tra gli argomenti utilizzi dei puntatori: in ogni caso stai passando al sottoprogramma degli INDIRIZZI di variabili/ecc... ma mentre nel primo caso il tutto avviene automaticamente(il compilatore invia l'indirizzo che viene acquisito dal sottoprogramma che lavora direttamente sulla variabile del chiamante, ecc...), nel secondo caso devi gestire esplicitamente il passaggio (devi cioè inviare al sottoprogramma un puntatore o un *indirizzo* e quando devi utilizzare i valori in esso contenuti devi appunto anteporre all'identificatore del puntatore il simbolo *).

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    467
    Originariamente inviato da Alex'87
    Credo che intendesse dire che i reference si usano in C++ mentre i puntatori è più "roba da C".

    In ogni caso, fail..

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Originariamente inviato da Alex'87
    Ops xD
    Beh, aspettiamo l'autore per togliere ogni dubbio.
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  10. #10
    comunque sostanzialmente fanno la stessa cosa, ossia quello di agire direttamente sulle locazioni di memoria che contengono le variabili.
    la differenza sta più che altrao nella comodità, così ogni volta che farai la chiamata della funzione non dovrai anteporre & agli argomenti e poi... durante la definizione della funzione (cioè nel suo corpo) non rischi di pasticciare con variabili e puntatori ma gestirai gli identificatori tutti nella stessa maniera, trattandole come normali nomi di variabili (ovviamente ti ho dato una spiegazione poco formale ma.. veritiera).

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 © 2020 vBulletin Solutions, Inc. All rights reserved.