Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [C++] Passagio per * o &

    Ciao, qualcuno potrebbe dirmi che differenza c'è tra passare ad una funzione un indirizo ed un puntatori (di qualsiasi tipo)?


    Grazie

  2. #2
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    In entrambi casi puoi cambiare il valore della variabile a cui si riferiscono, solo che se passi l'indirizzo (di un intero ad esempio) lo puoi usare nel metodo come stessi manipolando proprio la variabile, se invece passi un puntatore allora lo devi trattare come tale (quindi per modificare la variabile lo devi defeenziare). Credo che puoi implementare il metodo in un modo o nell'altro senza grosse differenze
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  3. #3
    Se io passo 2 variabili con questo programma:

    codice:
    void prova(int *a, int *b) {
      int *temp;
      temp=b;
      b=a;
      a=temp;
    }
    
    int main()
    {
          int a,b;
          cin >> a >> b;
          prova(&a,&b);
          cout << a << " " << b << endl;
          system("PAUSE");
          return 0;
    }
    All'uscita le variabili non sono invertite.

    Mentre con questo sono invertite:

    codice:
    void prova(int &a, int &b) {
      int temp;
      temp=b;
      b=a;
      a=temp;
    }
    
    int main()
    {
          int a,b;
          cin >> a >> b;
          prova(a,b);
          cout << a << " " << b << endl;
          system("PAUSE");
          return 0;
    }

    Io non riesco a capire la differenza che sta in questi 2 programmi...

  4. #4
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Così facendo nel primo programma stai semplicemente invertendo a cosa puntano a e b all'interno del metodo! Non stai modificando il valore della variabile, per fare ciò devi deferenziare i puntatori:
    codice:
    *temp=*b;
    *b=*a;
    *a=*temp;
    Così dovrebbe fungere.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  5. #5
    Utente bannato
    Registrato dal
    Sep 2003
    Messaggi
    1,012
    Semplificando un po' tutto:

    - Con il passaggio non per indirizzo, si opera su una COPIA dei dati
    - Con il passaggio per indirizzo, si opera sui dati reali e si può modificarli.

    Il passaggio per indrizzo si usa per due motivi:

    - Per poter modificare gli argomenti
    - Per incrementare le prestazioni evitando di copiare i dati


  6. #6
    Utente di HTML.it L'avatar di Xadoom
    Registrato dal
    Dec 2002
    Messaggi
    1,491
    Esatto...ma lui ha passato dei puntatori percui può modificare i valori delle variabili, solo che per fare ciò deve deferenziare i puntatori, ovvero lavorare non sul puntatore stesso ma sulla variabile a cui punta il puntatore.
    Windows Xp
    [Java]
    [PHP]Notepad++
    [Fortran90-77] elf90 g77
    [C++ /WinAPI] DevC++ VisualC++

  7. #7
    Qualcuno di voi può darmi un bel link sui puntatori che ne parli ampiamente?
    Secondo me sono la cosa più difficile del c++....

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    311
    Secondo me sono la cosa più difficile del c++....
    all'inizio forse, ma poi vedrai che non è così

  9. #9

    Lezioni Puntatori

    http://programmazione.html.it/cplusplus/

    C'e' qualcosa sui puntatori ma e' C++
    PoWered by:
    Gentoo 1.5.3 - Kernel 2.6.7
    Debian Sid - Kernel 2.6.7 - Bash 3.0
    Slackware current - Kernel 2.6.7

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