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 C : Sélectionner tout - Visualiser dans une fenêtre à part
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 C : Sélectionner tout - Visualiser dans une fenêtre à part
(&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.