Puntatori ... deep inside

MauroTec:
Strano quello in comportamento, se cambi il valore salvato nell'elemento 6 dell'array da 0xff a 0xfe, ptrTo_a.a1 dovrebbe contenere 0xfe.

Come dici tu non ho provato, ho provato viceversa e non accadeva, e di fatto ho pensato che il problema era relativo al fatto che i byte dentro la struttura non erano puntatori , ma valori.
Cambiando però il valore ai dati della struttura il buffer rimaneva invariato.

MauroTec:
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.

In realtà non si perde niente, solo che essendo il puntatore ad 8 bit invece che 16 va castato, di fatto il puntatore ad 8 bit punta al byte meno significativo di quell' uint16_t, ma i dati nel buffer non cambiano.
Mi aspettavo però che il secondo ed il terzo elemento di byte * a1[3] contenuto nella struttura contenessero rispettivamente l'indirizzo del byte più significatico di buffer[3] e il meno significativo di buffer[4], cosa che invece non accade.
Ho controllato gli indirizzi e sono perfettamente seguenti uno dall'altro 2 byte(dimensione del puntatore immagino) e contengono valori del tutto diversi dal nostro contesto .

Poi mi sono illuminato d'immenso e ho creato un semplice puntatore a byte che scorro come se fosse un array (che ovviamente non è) e riesco ad accedere sia in lettura che in scrittura agli elementi che voglio:

    byte * a ;
    
    a = (byte *)&buffer[3];

    valore puntato da a[0] -> 7 ;
    valore puntato da a[1] -> 8 ;
    valore puntato da a[2] -> 9 ;

    a[1] = 0xFF;
    a[1] = 0xee;
    a[2] = 0xdd;

    // i valori vengono correttamente variati anche nel buffer

Niente che non sapevo già, non ho scoperto niente.
Però mi sà tanto che quello che vorrei realizzare io non è del tutto fattibile.
Vorrei avere una struttura , contenente insiemi di byte che altro non sono che porzioni del contenuto del buffer, e per fare ciò avevo avuto la presunzione di pensare che bastasse far puntare il primo elemento della struttura al primo byte del buffer che conteneva i dati per quella struttura.

MauroTec:
PS: continua che mi piace. :stuck_out_tongue:

Oddio, detta così non suona molto bene ! :fearful: