Ciao, qualcuno potrebbe dirmi che differenza c'è tra passare ad una funzione un indirizo ed un puntatori (di qualsiasi tipo)?
Grazie
Ciao, qualcuno potrebbe dirmi che differenza c'è tra passare ad una funzione un indirizo ed un puntatori (di qualsiasi tipo)?
Grazie
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++
Se io passo 2 variabili con questo programma:
All'uscita le variabili non 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; }
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...
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:
Così dovrebbe fungere.codice:*temp=*b; *b=*a; *a=*temp;
Windows Xp
[Java]
[PHP]Notepad++
[Fortran90-77] elf90 g77
[C++ /WinAPI] DevC++ VisualC++
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
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++
Qualcuno di voi può darmi un bel link sui puntatori che ne parli ampiamente?
Secondo me sono la cosa più difficile del c++....
all'inizio forse, ma poi vedrai che non è cosìSecondo me sono la cosa più difficile del c++....
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