Постоянный указатель на постоянную структуру равен нулю - PullRequest
0 голосов
/ 21 апреля 2020

Я работаю над фрагментом кода, разработанным другими, и пытаюсь создать структуру c. Но при отладке кажется, что указатель равен нулю (не указывая на переменную, равную нулю):

typedef struct WiFiIP{
    // Keep the following in order!  (pri,sec)
    uint16_t WiFiPrimaryPort;
    uint16_t WiFiSecondaryPort;
    // Keep the following in order!  (pri,sec,sntp)
    char WiFiPrimaryAddress[32];
    char WiFiSecondaryIpAddress[32];
    char WiFiSntpIpAddress[32];
};
static const struct WiFiIP WiFiIPs = {7781,7781,"10.0.0.1","",""};
static const __typeof__ (WiFiIPs.WiFiPrimaryPort)
        * const PortPtr = &WiFiIPs.WiFiPrimaryPort;

static const __typeof__(WiFiIPs.WiFiPrimaryAddress)
    *AddressPtr = &WiFiIPs.WiFiPrimaryAddress;

Так что AddressPtr и PortPtr равны 0x0.

Я знаю Есть ряд других методов для «жесткого» кодирования параметров в коде, но в этом случае существующий код ожидает указатель на структуру, и я хотел бы избежать рефакторинга.

Пожалуйста, будьте осторожны, я никогда Я был хорош с указателями, и я знаю, что есть много литературы по указателям. Я искал и следовал ряду примеров, но не могу заставить его работать.

Этот код разрабатывается для процессора Cortex-M3

1 Ответ

0 голосов
/ 21 апреля 2020

Этого не должно произойти, и если я скопирую ваш точный код, он, кажется, будет работать, как и ожидалось. К сожалению, вы не указали, как вы отображаете значения указателя.

Чтобы правильно распечатать значение указателя, вы можете использовать что-то вроде:

printf("PortPtr points to memory location at: %#lX\n", (uintptr_t)PortPtr);
printf("AddressPtr points to memory location at: %#lX\n", (uintptr_t)AddressPtr);

В этом случае вы сможете убедиться, что указатели не инициализированы в NULL.

...