Problema passaggio puntatori

Ciao, ho un problema di C per cui avrei bisogno di una dritta. il mio programma prevede una serie di aree dati dove memorizzare dei valori che arrivano da una serie di sensori. Nel programma devo richiamare una routine "Ricevi" passandogli come parametro quale sia il gruppo sensori da trattare. A sua volta la routine Ricevi chiama un'altra routine "Aggiorna", anche qui passandogli il gruppo sensori da aggiornare. E' in questa seconda routine che i dati vengono effettivamente aggiornati.

Concettualmente il tutto dovrebbe fare qualcosa che (semplificato) è questo:

byte S1[4]; // dati gruppo sensori 1 byte S2[4]; // dati gruppo sensori 2 byte S3[4]; // dati gruppo sensori 3

void loop(){ Ricevi(&S1); Ricevi(&S2); Ricevi(&S3); }

void Ricevi(byte* address){ // qui prepara un po di cose e poi: Aggiorna(address); }

void Aggiorna(byte* address){ //aggiorna i valori nella specifica area dati che gli è stata passata address[1]=1; address[2]=2; address[3]=3; }

Purtroppo non mi funziona perche nelle aree dati S1-S3 non trovo poi i valori gusti. Penso di sbagliare qualcosa nel passaggio dei puntatori. Qualcuno più esperto di C sa darmi una dritta? Grazie e ciao. H

Hum (è il nome di un filosofo?), ciao.

L’errore ,ad occhio, pare nella funzione loop.

Dove però lo devi dire te !

Ti chiedo però , dato il seguente frammento:

int a;
int b[5];
int *d=&a;
int *c= b;

Che valori hanno d e c ?

Bye

mmmmmmmmm.... Il primo elemento di un Array ha indice 0, il 4 elemento ha indice 3. Forse è tutto qui.

Ciao.

Ciao Hum Ci dai il codice completo? Grazie ciao Uwe

è un'errore basico ed è quì:

byte S1[4]; // dati gruppo sensori 1
byte S2[4]; // dati gruppo sensori 2
byte S3[4]; // dati gruppo sensori 3

void loop(){
  Ricevi(&S1);
  Ricevi(&S2);
  Ricevi(&S3);
}

Un array è un puntatore. SEMPRE. utilizzare le [] dopo il nome dell'array equivale a usare la * con qualche magheggio.

quindi tu con "Ricevi(&S3);" non stai passando l'indirtizzo dell'array, ma l'indirizzo dell'indirizzo dell'array.

se non hai capito chiedi pure.

quindi tu con "Ricevi(&S3);" non stai passando l'indirtizzo dell'array, ma l'indirizzo dell'indirizzo dell'array.

Esatto non lo avevo visto, togli l'operatore &. E dove:address[1]=1; parti ti da zero ammeno che non ti interessi il primo elemento dell'array.

Ciao.

Ok, funziona. Grazie 1000 a tutti. Ciao