PDA

Visualizza la versione completa : [C++] Passagio per * o &


SkOrPiOn`87
12-03-2004, 19:01
Ciao, qualcuno potrebbe dirmi che differenza c'è tra passare ad una funzione un indirizo ed un puntatori (di qualsiasi tipo)?


Grazie :ciauz:

Xadoom
12-03-2004, 20:17
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 :ciauz:

SkOrPiOn`87
12-03-2004, 20:43
Se io passo 2 variabili con questo programma:



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:



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

Xadoom
12-03-2004, 21:05
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:


*temp=*b;
*b=*a;
*a=*temp;

Così dovrebbe fungere. :ciauz:

iguana13
13-03-2004, 16:34
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

:ciauz:

Xadoom
14-03-2004, 13:02
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. :ciauz:

SkOrPiOn`87
14-03-2004, 13:44
Qualcuno di voi può darmi un bel link sui puntatori che ne parli ampiamente?
Secondo me sono la cosa più difficile del c++.... :ciauz:

pela
14-03-2004, 17:32
Secondo me sono la cosa più difficile del c++.... :ciauz:
all'inizio forse, ma poi vedrai che non è così :)

kNemo
14-03-2004, 17:49
http://programmazione.html.it/cplusplus/

C'e' qualcosa sui puntatori ma e' C++

Loading