массив типа void

простой C имеет приятную особенность - указатели типа void, которые можно использовать как указатель на любой тип данных.
Но предположим, что у меня есть следующая структура:


struct token {
    int type;
    void *value;
};

где поле значения может указывать на массив символов, на int или что-то еще.
Поэтому при выделении нового экземпляра этой структуры мне нужно:

1) выделить память для этой структуры;
2) выделить память для значения и присвоить ее полю значения.

Мой вопрос - есть ли способы объявить « массив типа void», который может быть преобразован в любой другой тип, например указатель void?

Все, что я хочу, - это использовать «гибкий массив элементов» (описанный в 6.7.2.1 стандарта C99) с возможностью преобразования к любому типу.

Что-то вроде этого:


struct token {
    int type;
    void value[];
};

struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;

Я предполагаю, что объявление значения token-> как Массив char или int и приведение к необходимому типу позже выполнят эту работу, но могут сбить с толку тех, кто прочтет этот код позже.

12
задан Shweta 26 April 2011 в 05:23
поделиться