Newsgroup: it.comp.lang.c
Titolo: Passaggio Array da funzione a main

Mi trovo a far elaborare dati a due funzioni
diverse, entrambe lavorano su array che devono
poi, ovviamente, essere rimandati indietro alla main... 
Il fatto č che quando leggo i dati da "dentro" la funzione, sono giusti, 
mentre se li leggo da main, alcuni
rimangono ok, altri invece no... e non riesco a capire il perchč!!!
Per farla breve, come si passano "normalmente" degli array da una 
funzione a main?
(l'ideale sarebbe riuscire a farlo utilizzando un puntatore, dato che il 
simpatico prof. li ama tanto, sti
benedetti puntatori :PPPPP)
-- 
Ragno
http://ragnazz.altervista.org


se passi il puntatore degli array risparmi memoria e non dovresti avere
problemi a cambiarne i valori interni...
YourType *YourFunction(YourType *arg);
ivan

 YourType *YourFunction(YourType *arg);
La mia funzione č questa:
parametro  *Cfunc(parametro *, int);
parametro  *Cfunc(parametro * tabella_curve, int numero_curve)
{parametro *medie_errori[2];
...conti vari....
return *medie_errori; }
Da main la richiamo cosi:
parametro *medie_errori;
medie_errori=Bfunc(2); // la Bfunc alloca la memoria necessaria
medie_errori=Cfunc(tabella_curve, numero_curve);
Se faccio un fprintf sa dentro la funzione ho i dati "giusti", se la 
faccio da main ho gli stessi dati ma "scambiati" di posizione (o cosě 
sembra....)
In ogni caso il codice che ho scritto "dovrebbe" andare bene??
Grazie!
-- 
Ragno
http://ragnazz.altervista.org

 return *medie_errori; }
Guarda che lo spazio allocato per
   medie_errori
viene rilasciato alla fine della funzione. Pertanto al difuori
di Cfunc indirizzare medie_errori NON HA SENSO.
Tu stai restituendo l'indirizzo di una zona di memoria che _NON
E'_ piu' allocata per il tuo array. Quello che leggi sono valori
casuali.
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG


nella main sarebbe:
 parametro *medie_errori;
 medie_errori=Bfunc(2); /*questa funzione deve ritornare un puntatore alla
memoria allocata*/
 medie_errori=Cfunc( medie_errori, numero_curve);/*qui non servirebbe
nemmeno ritornare il puntatore alla main*/
ivan


YourType *YourFunction(YourType *arg);
arg non è un puntatore ad array, ma un puntatore.

 ha scritto nel messaggio
news:sd96225abh9qdtroi...@4ax.com...

beh può sempre accedere agli elementi usando l'indice....
non è vero?

 casuali.
Mapporc.... è vero!!!! grrrrrrrrrrrrrrrrrr
Quindi...uhmuhm.... come faccio a restituire alla main quei dati 
memorizzati in medie_errori?? 
-- 
Ragno
http://ragnazz.altervista.org

 fatto...
Si, esatto.
Grazie dei consigli!!
-- 
Ragno
http://ragnazz.altervista.org

 Grazie dei consigli!!
Mi accorgo adesso di una cosa...
Tu dicevi di ritornare tabella_curve, cioč:
parametro  *Cfunc(parametro * tabella_curve, int numero_curve)
 {
 ...conti vari....su elementi di tabella_curve
 return tabella_curve; }
Il fatto č che tabella_curve (contenente i dati da elaborare) č un array 
di 50 elementi, mentre dovrei ritornare al main un array, possibilmente 
diverso, fatto di soli 2 elementi.
Gli elementi, in entrambi i casi sono ugualie e sono delle strutture, 
ciascuna delle quali contiene 3 double.
Pero' nascerebbe il problema di come restituire alla main un array che 
io creo nella funzione e che, quindi, una volta chiusa la funzione, 
tornerebbe vuoto.... argh....
-- 
Ragno
http://ragnazz.altervista.org

 ha scritto nel messaggio
news:MPG.1e8e17eb2...@news.tin.it...

non puoi restituire un array che crei in una funzione alla main o ad
un'altra funzione.
devi creare l'array fuori dalla funziuone e passare alla funzione
interessata il puntatore
all'array...per esempio:
parametro result[2];
parametro  *Cfunc(parametro * tabella_curve, int numero_curve, parametro
*result)
 {
 ...conti vari
e stora risultato in result[1] e result[2]
 return result; }
ciao
ivan

 all'array...
Ci avevo pensato... in effetti dovrebbe funzionare.. nel frattempo ho 
"risolto" dichiarando l'array nella funzione ma allocando memoria con 
calloc, cosi non si perdeva nulla... ;))
Grazie dei consigli ;)
-- 
Ragno
http://ragnazz.altervista.org

[..]il puntatore all'array...
Aridalle co' 'sto puntatore all'array: in C, puntatore, array, array
di puntatori e puntatore ad array sono quattro concetti *diversi*.

non č vero?
Se arg č un array decaduto in puntatore al primo elemento sě.