Есть ли способ в C указать массив указателей, каждый из которых указывает на разные типы данных? - PullRequest
0 голосов
/ 21 мая 2019

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

Я вставил расширенные значения ASCII в качестве заполнителей, а затем вычел 0x80, чтобы извлечь индекс, основанный на точке вхождения заполнителя.Но у меня пока нет способа указать на разные исходные таблицы.

1 Ответ

2 голосов
/ 21 мая 2019

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

Одним из способов достижения этого является type casting элементы массива с намеченными типами данных при обращении к элементам / снятии ссылок на них.

Чтобы узнать правильный type при доступе к элементам, вам нужно сохранить тип при определении элемента.

Возможное решение может выглядеть так:

typedef struct
{
   int type; //0 - enumDay, 1 - Struct C etc
   void* data;
}mydata_t;

mydata_t myarray[10];

Назначение:

myarray[0].type = 2; //Lets assume 2 for string
myarray[0].data = "My String";

Использование:

 if( myarray[0].type == 2) // is it a string?
 {
    printf("This is the string :%s \n",(char*)myarray[0].Data);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...