es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

  1. 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.

  2. Estoy confundido por la inicialización ((ENETPACKET *)0x00500000) del puntero const, no entiendo qué se está inicializando aquí y los paréntesis y el operador *.

Tags:  , ,

Answer

  1. Avatar for 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 tipo ENETPACKET. La palabra clave const 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 memoria 0x00500000, que se asume que contiene un objeto de tipo ENETPACKET. La sintaxis (ENETPACKET *) realiza una conversión de tipo ((tipo)) del entero 0x00500000 a un puntero de tipo ENETPACKET, 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.

Comments are closed.