Можно ли создать указатель на внутреннюю структуру вложенной структуры в C?
#include <stdio.h>
#include <stdint.h>
typedef struct
{
uint8_t first;
struct
{
uint8_t second;
uint8_t third[8];
} inner_struct;
} outer_struct;
int main()
{
outer_struct foo;
void * p = &foo.inner_struct;
printf("%d", sizeof(p->third));
return 0;
}
Используя пустой указатель, я могу указать на него, но я получаю эту ошибку
main.c: In function 'main':
main.c:26:26: error: request for member 'third' in something not a structure or union
printf("%d", sizeof(p->third));
^~
при попытке получить размер «третьего» массива. Я также мог бы использовать указатель на external_struct, но реальный пример - это событие, более вложенное и содержащее длинные имена переменных, что затрудняет его чтение. Можно ли создать указатель на внутреннюю структуру напрямую?
Использование
struct inner_struct * p = &foo.inner_struct;
вместо пустот дает
main.c: In function 'main':
main.c:25:31: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
struct inner_struct * p = &foo.inner_struct;
^
main.c:26:26: error: dereferencing pointer to incomplete type 'struct inner_struct'
printf("%d", sizeof(p->inner_struct.third));
^~