Punteros a estructuras y su inicialización.
Tengo una estructura en C de la siguiente manera:
typedef struct ENETPACKET_S {
unsigned n_rxcmd, n_txcmd;
uint64_t n_mac; // 8 bytes unsigned or 64 bit
unsigned n_rxmiss, n_rxerr, n_rxcrc, n_txcol;
} ENETPACKET;
A continuación, se está definiendo un puntero a partir de la variable de esta estructura:
static volatile ENETPACKET *const _net1 = ((ENETPACKET *)0x00500000);
Tengo dos preguntas:
-
Entiendo los punteros a una estructura, pero en la declaración de
_net1
, se está definiendo un puntero a partir de una variable/objeto de una estructura. No lo entiendo. -
Estoy confundido por la inicialización
((ENETPACKET *)0x00500000)
del punteroconst
, no entiendo qué se está inicializando aquí y los paréntesis y el operador*
.
davy.ai
En la declaración de
_net1
, no se está definiendo un puntero a partir de una variable/objeto de una estructura. En cambio,_net1
es un puntero a un objeto constante de tipoENETPACKET
. La palabra claveconst
indica que el objeto apuntado por_net1
no puede ser modificado a través de este puntero.((ENETPACKET *)0x00500000)
inicializa_net1
para que apunte a la ubicación de memoria0x00500000
, que se asume que contiene un objeto de tipoENETPACKET
. La sintaxis(ENETPACKET *)
realiza una conversión de tipo ((tipo)
) del entero0x00500000
a un puntero de tipoENETPACKET
, que luego se asigna a_net1
. Los paréntesis alrededor de la conversión no son estrictamente necesarios, pero indican al compilador que la conversión debe aplicarse primero al entero, antes de que se aplique el operador de indirección de puntero (*
) al resultado.