Non sono del tutto convinto di quanto hai detto sopra.
Due sono le principali cause che mi hanno portato a smentirti:
- i valori della struttura sono copie dei valori del buffer, in quanto se li modifico, poi cambiano nella struttura, ma non nel buffer!
- ha anche senso quanto detto sopra visto che nella struttura i 3 byte sono definiti come tali e non come puntatori.
Strano quello in comportamento, se cambi il valore salvato nell'elemento 6 dell'array da 0xff a 0xfe, ptrTo_a.a1 dovrebbe contenere 0xfe.
L'ultimo esempio non mmi pare per niente strano.
&buffer[3]; estrae l'indirizzo di memoria della cella in cui si trova memorizzato il 4 elemento dell'array, dato che è grande 16 bit.
(byte *) cast esplicito di un dato grande 16 bit ad uno di 8 bit, risultato gli 8 bit più significativi vengono persi e rimango i meno significativi.
Poi ciò che rimane lo memorizzi in un array di byte.
nota che buffer contiene elementi da 16 bit, sottraendo 0xff - 0xee = 17, 0xee - 0xdd = 17. Prova invece a stampare &buffer[3], deve essere un intero senza segno, dove gli 8 bit meno significativi valgono 0xff.
PS: continua che mi piace.
ciao.