Newsgroup: it.comp.lang.c
Titolo: Una semplice domanda sulle funzioni

Salve,
è possibile programmare delle funzioni in C che restituiscano degli array
(anche multidimensionali) come valore di ritorno?
Ad esempio, è possibile scrivere una funzione che accetta come parametro un
array di interi e restituisca un altro array di interi?
In caso affermativo, come deve essere definita?
grazie a tutti
-- 
Posted from 
net145-194.mclink.it
 [195.110.145.194] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

In caso affermativo, come deve essere definita?
Il metodo migliore e' questo secondo me.
int * funzione (int size)
{
    int tmp = malloc(size*sizeof(int))
    retrun tmp;
}
Visto che puntatori e vettori possono essere usati in modo molto
simile questa va benissimo.
E' anche possibile dichiarare espressamente che la funzione ritorna un
vettore in modo seguente:
typedef int vector [];
vector funzione (int size);
Questo e' un trucco alla fine, perche' mi evita uno spinoso problema
di dichiarare espressamente una funzione che ritorna un vettore.
La risposta al tuo problema termina qui :)
Ora provo a dire come dovrebbe essere la dichiarazione fatta per
esteso, ovvero senza typedef:
int funzione (int size) [] ;
Su questo pero' non sono certo, quindi accetto volentieri correzioni
:)
Mox.

 Su questo pero' non sono certo, quindi accetto volentieri correzioni
la diciarazione per una funz ce accetta come parametro un int e ritorna un
array di int č:
int * funzione(int size)
Per avere come parametro un array č necessaria la seguente dichiarazione:
int *funzione(int * vect);
oppure
int*funzione(int vect[]);
il problema č che non si sa la lungezza del vettore ritornato per cui la
cosa migliore sarebbe definire una struct contenete array e relativa
dimensione quindi passarlo alla funzione

int funzione (int size) [] ;
Non va bene.
-- 
The Follet

(anche multidimensionali) come valore di ritorno?
Il metodo comunemente usato e' quello di usare il puntatore
al primo elemento dell'array come valore di ritorno.
Altrimenti, se si vuol trasferire tutto il vettore, lo si
puo' racchiudere in una struttura:
<CODE>
typedef int vector[20];
typedef struct vector_struct {
               vector v;
        };
struct vector_struct funz( struct vector_struct v );
</CODE>
-- 
The Follet

 int * funzione(int size)
In questo modo perň devi far ritornare alla funzione il puntatore al primo
elemento dell'array.
Cecco

typedefe int* vector
Anche quella di Mox va bene (e' equivalente).
-- 
The Follet

Non va bene.
Si, ma visto che un modo equivalente per dirlo senza usare il trucco
della typedef o ritornare un puntatore mi sai dire com'e'? :)
Mox

Dovresti sistemare il reply: "R:".
In una mail questo e' fastidioso, ma alla fine non implica nulla... in
un ng altera la corretta visualizzazione dei msg in un'unico thread.
Please provvedi. Puoi cambiare a mano ogni reply, indicare al tuo
client (ho come il sospetto che sia Guardafuori Espresso) di
rispondere con "Re:" oppure se la tua versione non lo permette ci sono
in rete delle patch apposta.
Scusate l'OT :)
Mox

della typedef o ritornare un puntatore mi sai dire com'e'? :)
Sigh, pare scritto da un cammello ubriaco semianalfabeta, scusate. Ho
fatto un po' (TANTO) casino :P
Volevo dire:
Oki, cosi' non va bene. Come avrei dovuto scriverla perche'
funzionasse? Ovviamente senza usare puntatori o typedef.
Mox.

 ha scritto nel messaggio
news:sWf0O9XopVn9o9...@4ax.com...

Non si può scrivere. Non esiste la possibilità di far ritornare direttamente
un array ad una funzione.
Cecco

 della typedef o ritornare un puntatore mi sai dire com'e'? :)
Quello  di usare un puntatore, e' l'unico  modo 
per  restituire  un riferimento a una  zona  di 
memoria  in cui ci sia un vettore di  elementi,  
se  non  si vuol  ricorrere  ad  una struttura, 
in cui racchiudere il tutto.
-- 
Posted from  [80.105.34.80] 


Un grazie a tutti per le cortesi ed utili risposte.
-- 
Posted from 
net145-210.mclink.it
 [195.110.145.210] 



chissa' perche' bisogna patchare OE se lui non ha problemi a
visualizzare i thread, mente sono gli altri reader (come il tuo Forte
Agent) ad ignorare i "References:" nel presentare i messaggi!
Non so tu come lo vedi, ma da me in OE il thread e' perfettamente
incolonnato.
Questo mio messaggio ce l'hai in risposta al tuo o e' a spasso, visto
che il subject e' differente.
scusate il mega OT, ma sta storia di patchare OE e non gli altri reader,
non l'ho mai capita.
ciao
donCiccio

visualizzare i thread,
Certo che bisogna farlo.
Lo standard di risposta ai messaggi, su Usenet (vedi RFC
relativa) e' "Re:", non "R:".
Chissa' perche' Microsoft ignora gli standard.
-- 
The Follet

Chissa' perche' Microsoft ignora gli standard.
Al contrario, cerca di sostituirli con i suoi...
Gli standard de-facto hanno il terribile difetto di non portare alcun
dollarino allo zio bill.
ciao, acc.   
a...@libero.it

 al primo elemento dell'array.
In ogni caso, nel passaggio/ritorno da funzioni il nome dell'array
decade a puntatore al primo elemento.
int *foo(void) {
	static int bar[123];
	return bar;
}
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Mi piace avere amici rispettabili;
Mi piace essere il peggiore della compagnia.

Hai ragione, a sto punto bruciamo tutte le RFC, tanto sono inutili.
Da quele vogliamo iniziare? Dalla 1 a salire?
Oki, continuiamo su it.comp.os.dibattiti... tanto li i flame sono
all'ordine del giorno :P
Mox