Puntatori ... deep inside

Ok, noi ci siamo capiti ora per gli altri.

In realtà non è come dici tu, il risultato ottenuto è esattamente quello che avrei sperato, ovvero che viene valorizzata la struttura con i byte dell'array a partire dal 6sto elemento.

Esatto, ma non si tratta di una valorizzazione in quanto non abbiamo dichiarato alcuna variabile di tipo struttura e quindi non abbiamo impegnato memoria. Cioè che facciamo è di accedere agli elementi dell'array 6,7,8 attraverso un puntatore a struttura definita in a_Struct. Pertanto i dati oltre l'elemento 8 dell'array rimangono accessibili solo attraverso l'indice delll'array stesso.

Giustifico la necessità di dover specificare il cast (a_Struct *) con il fatto che il compilatore deve comunque sapere ' cosa c'è ' nel puntatore di destinazione.

A volte ritengo che alcune manovre siano veramente insitamente molto criptiche smiley-neutral

Si la necessità che ha il compilatore potrebbe essere legata al fatto che in questo modo esplicitiamo il cast evitando possibili incomprensioni che potrebbero venire fuori durante l'esecuzione. Si il C è molto criptico, ma il massimo di cripticità il lo provato difronte alle espressioni regolari, dove un solo simbolo assume diversi significati in base alla posizione e al simbolo vicino.

Da notare l'operatore di reference & usato in quel codice qui "&buffer[5]" questo è necessario perchè l'accesso tramite indice dereferenzia (*) l'array buffer che usato da solo è un indirizzo di memoria, quindi la dereferenziazione ritorna il valore contenuto nella 6 cella di memoria (12esima se si trattasse di int), ma a noi invece interessa l'indirizzo di memoria per assegnarlo ad un puntatore ad indirizzo di memoria di tipo struttura.

Peccato che questa cosa non si può fare con le strutture bitfield, perchè sarebbe comodo accedere ad ogni singolo bit di un byte, int attraverso un campo di una struttura. Nei microcontroller della serie xmega è possibile accedere ai registri come si trattasse di una struttura.

Ciao.