PDA

View Full Version : [C++] puntatori ed array


shang84
22-10-2005, 16:57
Ciao a tutti,

se io nel main ho una cosa del genere:

double [] funzione();

int main(){

double elementi[];
elementi = funzione();

// una volta chiamata la funzione posso fare elementi[5]?

return 0;
}

//dove funzione e' cosi' definita:

double [] funzione(){
double aggiornamentoDimensioneArray [100];
return aggiornamentoDimensioneArray;
}

71104
22-10-2005, 17:13
no, la funzione è sbagliata, non puoi restituire cose che puntano nello stack perché quando esci dalla funzione vengono distrutte.

shang84
22-10-2005, 17:26
che soluzione potrei adottare?

shang84
22-10-2005, 17:44
Ma se io voglio che una funzione mi inserisca i valori in un array che gli passo dal main, e' possibile farlo senza dover specificare nel main la dimensione dell'array?

Come?

Grazie!

fek
22-10-2005, 19:04
che soluzione potrei adottare?


void DoSomethingOnThisArray(double arrayOfDoubles[], int numberOfElements)
{
for (int i = 0; i < numberOfElements; ++i)
{
// do something cool here with arrayOfDoubles[i]
}
}

...

double myArrayOfDoubles[ARRAY_SIZE];
DoSomethingOnThisArray(myArrayOfDoubles, ARRAY_SIZE);

Ziosilvio
23-10-2005, 00:33
double elementi[];
elementi = funzione();
Non puoi assegnare un valore a un array.
Se vuoi creare array senza sapere all'inizio la loro dimensione, devi usare malloc e free.
Mi sa che sono il prossimo argomento del tuo corso di C.

jappilas
23-10-2005, 01:04
oppure, visto che nel titolo c'è scritto c++, implementi l' Array come una classe contenente un metodo Resize che implementerai con new (creazione del nuovo array) e delete (distruzione del vecchio array dopo aver effettuato una copia dei valori nel nuovo)...

Ziosilvio
23-10-2005, 11:12
nel titolo c'è scritto c++
Ops... chiedo venia... sapete, la forza dell'abitudine, l'ora tarda... :mc:

Allora: come prima, sostituendo malloc con new[], e free con delete[].

shang84
23-10-2005, 12:08
Ottimo.
Ora ho rinfrescato un po' le mie conoscenze, ho capito come muovermi.

Thnks!