PDA

Visualizza la versione completa : [C] Funzioni che ritornano un vettore


Guitar_joker87
10-05-2007, 17:06
mi rendo conto che a volte faccio domande inutili...ma sto per impazzire... io devo fare una funzione che mi ritorna un vettore di unsigned int di 3 elementi...
mi potete scrivere un codice di esempio?... cioè la sintassi giusta per far in modo che ritorni un vettore e non una singola variabile...grazie

oregon
10-05-2007, 17:16
Devi restituire un puntatore di quel tipo, quindi

unsigned int *funzione(... argomenti ...)
{
...
}

avendo cura di allocare internamente in maniera dinamica il vettore e restituirne l'indirizzo con la return ...

Guitar_joker87
10-05-2007, 19:23
puoi spiegarti un pò meglio...
io ho questa funzione

void input16 (unsigned int a){
unsigned int op[2];
unsigned int ms[2];
int i;

ms[0]=65535;
ms[1]=4294901760;

for (i=0;i<1;i++) op[i]=a & ms[i];
op[1]=op[1]>>16;
for (i=1;i>=0;i--) printf ("%u ",op[i]);
}

vorrei che mi ritornasse il vettore op[] come devo fare...

andbin
10-05-2007, 20:45
Originariamente inviato da Guitar_joker87
void input16 (unsigned int a){
unsigned int op[2];
unsigned int ms[2];
....
}

vorrei che mi ritornasse il vettore op[] come devo fare... Devi allocarlo dinamicamente, il vettore. Gli array 'op' e 'ms' che hai definito, sono allocati sullo stack. Quando la funzione termina, essi spariscono.

Guitar_joker87
10-05-2007, 21:20
devo cioè usare una malloc? nel main? potri allocare solo op se mi serve solo quello?non si potrebbe scrivere un pò di codice per farmi capire?...

zero85
10-05-2007, 23:33
Dovrebbe diventare una cosa del genere:



#include <stdlib.h>
#include <stdio.h>

#define N 2

unsigned int* input16 (unsigned int a){

unsigned int* op = (unsigned int*)malloc(sizeof(unsigned int)*N);

if(op == NULL){
exit(1);
}

unsigned int ms[N];
int i;

ms[0]=65535;
ms[1]=4294901760;

for (i=0;i<N;i++)
op[i]=a & ms[i];

op[1]=op[1]>>16;

for (i=0;i<N;i++)
printf ("%u ",op[i]);

return op;
}

int main(){

unsigned int* p = input16(5);
int k;

printf("\n");

for(k=0;k<N;k++)
printf("%u ",p[k]);
delete[] p;
getchar();
return 0;
}

Samuele_70
10-05-2007, 23:41
Originariamente inviato da zero85


...
for(k=0;k<N;k++)
printf("%u ",p[k]);
delete[] p;
getchar();
return 0;
}


In un codice C usi il delete ? :mame:

zero85
10-05-2007, 23:46
O porca troppa abitudine a fare misti c/c++ :dhò:

usa al posto la funzione free()
:yuppi:

Guitar_joker87
11-05-2007, 08:46
grazie... siete stati molto esaurienti

Loading