Массив указателей на РАЗЛИЧНЫЕ структуры с РАЗЛИЧНОЙ структурой C - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь создать указатель массива разных структур с разными размерами каждой структуры. Я имею в виду... 1. У меня есть структурная доля для всех остальных структур.

typedef struct {

    uint8_t TouchAreasCodes;
    uint8_t TouchEditFunctions;
    uint8_t TouchCalbackFunctions;
    bool TouchRelease;

}   APP_TOUCH_PAGES; 
  1. Основываясь на этой структуре, мне нужно создать разные "подструктуры" с разными размерами. Эти структуры являются массивами исходной структуры.

    APP_TOUCH_PAGES TOUCH_PAGE_1 [5]; APP_TOUCH_PAGES TOUCH_PAGE_2 [5]; APP_TOUCH_PAGES TOUCH_PAGE_3 [5]; APP_TOUCH_PAGES TOUCH_PAGE_4 [16]; ...

  2. Каждая из этих «подструктур» будет иметь разный размер. Как мы видим выше, некоторые из них будут 5 размера, другие 16, другие могут быть 8 ...

  3. Мне нужно указать на каждую «подструктуру» из массива указателей. Каждая позиция массива указателей будет указывать на каждую из подструктур.

    * ArrayTouchPages [165];

Например:

*ArrayTouchPages[0] -> TOUCH_PAGE_1[0].TouchAreasCodes    
*ArrayTouchPages[0] -> TOUCH_PAGE_1[1].TouchAreasCodes
...
*ArrayTouchPages[3] -> TOUCH_PAGE_4[14].TouchAreasCodes
*ArrayTouchPages[3] -> TOUCH_PAGE_4[15].TouchAreasCodes
  1. Я пробовал много вещей, но всегда терпел неудачу. например:

    struct TOUCH_PAGE_MODBUS_ADDRESS * ArrayTouchPages [0]; ArrayTouchPages [0] -> TouchAreasCodes = 14;

АЛЬТЕРНАТИВА:

Единственная альтернатива, которая должна работать:

  1. Создание различных структур: одна структура для каждой "страницы" ..

    struct PAGE_1 {

    uint8_t TouchAreasCodes[5];
    uint8_t TouchEditFunctions[5];
    uint8_t TouchCalbackFunctions[5];
    bool TouchRelease[5];
    

    }

    struct PAGE_4 {

    uint8_t TouchAreasCodes[16];
    uint8_t TouchEditFunctions[16];
    uint8_t TouchCalbackFunctions[16];
    bool TouchRelease[16];
    

    }

  2. Затем укажите от массива указателей до каждого:

    struct PAGE_1 * ArrayTouchPages [0], PAGE_1_ptr;

    ArrayTouchPages [0] = & PAGE_1_ptr;

    ArrayTouchPages [0] -> TouchAreasCodes [0];
    ArrayTouchPages [0] -> TouchAreasCodes [5];

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

Есть идеи или предложения?

Большое спасибо за поддержку. С уважением,

...