View Full Version : [c] return di un array da funzione
ciao a tutti,
sono un pò confuso su come sia possibile fare, ad esempio, un "return a[]" da una funzione, dove a è un array int di n variabili... (n è definito) c'è qualche buon anima che mi aiuta?? :muro:
tnx :D :D
trallallero
08-12-2008, 10:21
ciao a tutti,
sono un pò confuso su come sia possibile fare, ad esempio, un "return a[]" da una funzione, dove a è un array int di n variabili... (n è definito) c'è qualche buon anima che mi aiuta?? :muro:
tnx :D :D
Detta così non è molto chiara ... devi comunque tornare un puntatore
dunque cerco di chiarire,
ho una matrice char ed una stringa in input, voglio che la funzione controlli se gli elementi della matrice appartengano alla stringa (fatto) e mi restituisca gli indici delle parole trovate.
io ho fatto:
void trovaParole(char string[], int a[]);
main()
{
.........................
trovaParole(string,a);
.........................
}
void trovaParole(char string[], int a[])
{
...................
dichiarato la matrice etc etc....
...................
tokenPtr = strtok(string, " ?" );
for(x=0;x<8;x++){
for(y=0;y<7;y++){
if( !strcmp( mis[x][y], tokenPtr) ){
a[z]=x+1;z++;
a[z]=y+1;z++;
}
}
tokenPtr = strtok(NULL, " ?");
}
return;
}
scritto cosi riesco a compilare ma quando lo eseguo mi da errore...
trallallero
08-12-2008, 13:32
Non ho capito molto bene quello che devi fare ma se vuoi una funzione che ti torni una lista di indici devi usare memoria dinamica (in C)
Ho scritto al volo questo esempio:
void trovaParole(int **a)
{
int i = 0;
*a = malloc( 11 * sizeof(int) );
for( ; i < 10; ++i )
(*a)[i] = i;
(*a)[i] = -1; // termina la lista
}
int main ()
{
int *x = NULL;
int i = 0;
trovaParole(&x);
if (x)
{
while(x[i] >= 0)
printf("indice: %i\n", x[i++]);
free(x);
}
return 0;
}
"trovaParole" diciamo che trova 10 indici.
Alloca un vettore di interi passato dal main con 11 interi, l'ultimo lo setta a -1 come terminatore.
Non so se ti può servire
dreadknight
08-12-2008, 15:02
dunque cerco di chiarire,
ho una matrice char ed una stringa in input, voglio che la funzione controlli se gli elementi della matrice appartengano alla stringa (fatto) e mi restituisca gli indici delle parole trovate.
quando esegui il confronto tra gli elementi della matrice e quelli dell'array, scrivi il programma in modo che memorizzi gli indici in un altro array che devi dichiarare nel main. In questo modo puoi utilizzare
return vector;
ove vector è l'indirizzo del primo elemento del tuo vettore ausiliario. Però come ha suggerito giustamente trallallero, dovresti usare l'allocazione dinamica della memoria
ok credo di aver capito, ho provato come avete suggerito ma da errore di conv da void* a int*, adesso lo aggiusto un poco e grazie dell'aiuto:D
dreadknight
08-12-2008, 17:07
ok credo di aver capito, ho provato come avete suggerito ma da errore di conv da void* a int*, adesso lo aggiusto un poco e grazie dell'aiuto:D
probabilmente perché hai dichiarato la funzione trovaParole come void; se devi farti restituire un puntatore ad un vettore di interi, la devi dichiarare int (o meglio int* )
no ho risolto quel problema (era il compilatore che mi considerava l'argomento di malloc come void) il nuovo problema :D (strano) è sempre quello che avevo in precedenza ossia una volta che eseguo mi da errore...
domani se nn ho trovato l'errore chiedo dinuovo udienza :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.