decryptage d'une expression structure pointeur
Bonjour,
Le code ci-dessous est extrait d'un code parfaitement fonctionnel que j'ai un peu de mal à décrypter (je suis débutant en C). Il s'agit de l'initialisation d'un buffer circulaire pour une liaison serie.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| char TX_buf[32];
char RX_buf[32];
struct {
unsigned char *ringBuf_start;
unsigned char *ringBuf_end;
unsigned char *ringBuf_in;
unsigned char *ringBuf_out;
} TX;
struct {
unsigned char *ringBuf_start;
unsigned char *ringBuf_end;
unsigned char *ringBuf_in;
unsigned char *ringBuf_out;
} RX;
void init_serial_buffer(void)
{
((&TX) -> ringBuf_in = (&TX) -> ringBuf_out = (&TX) -> ringBuf_start = TX_buf, (&TX) -> ringBuf_end = &(&TX) -> ringBuf_start[32-1]);
((&RX) -> ringBuf_in = (&RX) -> ringBuf_out = (&RX) -> ringBuf_start = RX_buf, (&RX) -> ringBuf_end = &(&RX) -> ringBuf_start[32-1]);
} |
Je me demande ce que signifie "&(&TX) ->" dans :
Code:
(&TX) -> ringBuf_end = &(&TX) -> ringBuf_start[32-1]);
Et plus généralement, connaissez-vous des sites, des livres, videos...etc où je pourrai m'entrainer à la lecture et/ou à la production d'expressions complexes de pointeurs/structures. Sachant à moyen terme je doit devenir capable de produire du code optimisé pour systèmes embarqués.
Merci d'avance.