puntatori e vettori ????

Ciao tutti, vi pongo un quesito e spero possiate aiutarmi. Se dichiaro un vettore e un puntatore ad esso in questo modo:

uint8_t *p; 
uint8_t buff[4]; 
p=buff;
*(p++)=1;
*(p++)=2;
*(p++)=3;
*(p++)=4;

allora l'equivalenza che vale nel C del tipo:

p[1]=*(buff+1)

in Arduino non valga?

Non so per quale motivo ma se uso p[i] dentro un for i risultati sono assurdi. Spero che qualcuno mi possa aiutare.

grazie,ciao!

Si, i puntatori li puoi usare anche se qui è fortemente sconsigliato. E' per i principianti, credo ... ed effettivamente può essere una bella fonte di problemi se non li si sanno usare.

Comunque, visto che anche io li ho sempre usati, mi sono messo alla ricerca e ho trovato anche questa pagina che ne parla: http://www.arduino.cc/playground/Code/Pointer

Da questi appunti dovresti avere le tue risposte... 8-)

aggiungo: perchè usi la forma uint8_t per dichiarare? Se vuoi che tutto funzioni alla perfezione (ed essere capito dai più in questo forum) sarebbe meglio tu usassi le forme previste per Arduino:

boolean char byte int unsigned int long unsigned long float double string array void

n.b. char = unsigned byte (e presumo anche = uint8_t)

sì hai ragione è che avendo messo mano ad un codice già fatto non ho pensato al fatto che era un typedef e quindi qualcuno poteva non capirmi. ;D Ti ringrazio comunque per la risposta ma diciamo che c'è poco anche nella pagina che mi hai linkato, forse dovrei cercare info fra la documentazione del compilatore che utilizza arduino. boh....

Per il typedef hai centrato il segno, perchè qui è pieno di nuove leve e rischiamo di fare un gran casino ;) Per il tuo problema hai provato con google e una query così: "site:arduino.cc pointer" ??

Che io sappia anche se buff è un vettore ed esite una equivalenza puntatore vettore, devi cmq passargli l’indirizzo, sebbene come parametri di una funzione non sia necessario.
Prova semplicemente

p=&buff[0]

al posto del tuo e vedi come butta.
Ciao

Aggiungo.. attenzione anche alle precedenze negli incrementi... non mi ricordo molto bene ma se scrivi *(p++) in un assegnamento, prima assegni il valore a quello che punta p e solo successivamente p viene incrementato. Il che avrebbe senso se tu volessi partire assegnando all'inizio un 0. Ricordati che tu dichiari un vettore da 5 uint (i vettori partono da 0) e fai solo 4 assegnamenti.

grazie a tutti! DrAma78, penso che tu abbia centrato il segno, adesso proverò a cambiarlo e vedo che succede, soprattutto con la tua ultima risposta penso di aver risolto il problema.

grazie

Di niente, spero che tu abbia risolto.