PDA

Visualizza la versione completa : [c++] Funzione + array


SkOrPiOn`87
07-04-2004, 18:34
Ciao, io ho provato a fare questo codice


int main()
{
int a[3] = {1,2,3};
b(a);
cout << a[2] << endl;
return 0;
}
void b(int *a) {
a[2] = 5;
}


Che giustamente mi modifica il valore del 3° elemento dell'array, perchè ne passo l'indirizzo.

Però volevo sapere se c'era il modo di passarne una copia dell'array così da non modificare l'array passato, ma che quando esco dalla funzione l'array mi torna nuovamente come prima...

Qualcuno sa se si può?

Ciao :ciauz:

Sergio Pedone
07-04-2004, 18:42
Forse basta:
void b(const int *a)

iguana13
07-04-2004, 19:10
Credo proprio di no... devi fare una funzione che copi l'array.

:ciauz:

Sergio Pedone
07-04-2004, 19:13
Perchè no?
Passa un puntatore costante all'array e la copia la crea
all'interno del metodo, in modo da localizzare le
varie operazioni.

iguana13
07-04-2004, 19:25
OK, ma comunque il compilatore non esegue automaticamente il lavoro di copiatura!

Sergio Pedone
07-04-2004, 19:33
L'utilità del const è anche quello o sbaglio?
Abbi pazienza se insisto, ma quando posso studiacchio
un poco di c++ e da autodidatta cerco conferme.

SkOrPiOn`87
07-04-2004, 20:28
const fa si che non venga alterata la variabile e quindi io non potrei modificare l'array dentro la funzione... ma io voglio modificarlo, solo che all'uscita vorrei che tornanne lo stesso array che era prima della chiamata della funzione, quindi mi servirebbe creare una copia...

Ciao :ciauz:

Michele Facchin
07-04-2004, 20:59
Gli array in C puoi passarli solo per riferimento.

Un' idea sarebbe dentro la funzione copiare l'array nel heap, e finito di fare le operazioni desiderate, puntare all'indirizzo del array del heap.

Questo ti consuma memoria però, quindi ti conviene allocare nel heap anche l'array originale e deallocarlo una volta finito le operazioni che dovevi fare.

SkOrPiOn`87
08-04-2004, 16:00
Grazie :ciauz:

Loading