PDA

Visualizza la versione completa : utilizzare array al di fuori dellla sua funzione


gianni88r
20-02-2015, 09:34
signori buongiorno,
della seguente funzione:



int Blocks2()
{
static int i = 0;
int j;
uint16_t blocks2;
char buf2[32];
int coordinatex2[] = {0,0,0,0,0};


blocks2 = pixy2.getBlocks();


if (blocks2)
{
i++;

// do this (print) every 50 frames because printing every
// frame would bog down the Arduino
if (i%50==0)
{
sprintf(buf2, "Detected %d:\n", blocks2);
Serial.print(buf2);
for (j=0; j<blocks2; j++)
{
sprintf(buf2, " block %d: ", j);
Serial.print(buf2);
pixy2.blocks[j].print();
coordinatex2[j] = pixy2.blocks[j].x;
}
}
}
}


avrei bisogno di tirarmi fuori l'array: coordinatex2[] solo che non potendoli estrarre come parametri sono un pelo piantato, avevo pensato di passarmi un altro array dal main del programma invio[], e poi copiare coordinatex2[] in invio[], può essere un' idea? se l'array edl main lo "importo" nella funzione così:


int Blocks2(invio[]){}

grazie in anticipo

MItaly
20-02-2015, 10:07
Le tre possibilità "classiche" sono:
- come dici tu, te lo fai passare come parametro;
- lo inglobi in una struct, che può essere usata come valore di ritorno;
- usi l'allocazione dinamica e restituisci un puntatore all'array così allocato (il chiamante dovrà poi deallocarlo esplicitamente).

gianni88r
20-02-2015, 10:40
ah ok, ma e per importare l array invio[] questa sintassi e giusta?




int Blocks0(invio0[])
{
static int i = 0;
int j;
uint16_t blocks0;
char buf0[32];
int coordinatex0[] = {0,0,0,0,0};
// int a = 0;
int b = 0;

blocks0 = pixy0.getBlocks();


if (blocks0)
{
i++;

// do this (print) every 50 frames because printing every
// frame would bog down the Arduino
if (i%50==0)
{
sprintf(buf0, "Detected %d:\n", blocks0);
Serial.print(buf0);
for (j=0; j<blocks0; j++)
{
sprintf(buf0, " block %d: ", j);
Serial.print(buf0);
pixy0.blocks[j].print();
coordinatex0[j] = pixy0.blocks[j].x;
invio[j] = coordinatex2[j];
}
}
}






return invio[];






}



e questo array invio[] lo posso richiamare dal corpo principale dichiarandolo e inizializzandolo li? mi sfugge la sintassi per imortarlo eleborarlo e rispedirlo fuori aggiornato

oregon
20-02-2015, 12:16
L'array non si "importa".

Puoi passare l'array con

void funzione(int array[])

e modificarlo nella funzione. Le modifiche saranno visibili anche all'esterno della funzione e non dovrai fare nessun "return".

gianni88r
20-02-2015, 13:56
però se uso questa sintassi: int funzione(int array[]) mi da errore, m dice che array[] non e dichiarato, anche l ho dichiarato nel principale! scusate l'incopetenza..

gianni88r
20-02-2015, 14:08
int memoria0[] = {0,0,0,0,0}; // dichiaro l array nel principale
.
.
.

int Blocks0(int memoria0[]) lo passo alla funzione
{
.
.
.
}

Blocks0(memoria0[]);





così mi chiede il parametro dentro le [] che parametro intende?
Blocks0(memoria0[]);

oregon
20-02-2015, 15:37
Chiami la funzione con

Blocks0(memoria0);

non con le parentesi quadre ...

gianni88r
20-02-2015, 16:53
grazie mille

Loading