объявление указателя на двумерный массив void * - PullRequest
2 голосов
/ 24 сентября 2010

У меня проблемы с выяснением, как объявить указатель на массив массивов void*.(Я не могу использовать контейнеры STL и тому подобное, потому что это встроенная система.)

У меня есть некоторые данные, которые я пытаюсь сгруппировать в структуру.В основном встроенные типы данных, но тогда это два массива.Первый,

char *testpanel_desc[] = {...};

не проблема.В моей структуре я храню указатель на этот массив следующим образом:

struct MyStruct
{
    ...
    char** panelDesc;
};

Но есть такой:

 void *testpanel_pointers[][4] = {...};

, и я не могу найти способ определитьчлен моей структуры, которой я могу назначить этот массив.void*** не работает из-за 4 в исходной декларации.

Ответы [ 2 ]

4 голосов
/ 24 сентября 2010

Сделайте жизнь немного проще и используйте typedefs

identity<void*[4]>::type *panelDesc;

Или эквивалент

typedef void *type[4];
type *panelDesc;

Я сомневаюсь, что вы знаете, что означает следующее, но достаточно сказать, что он тоже эквивалентен

void *(*panelDesc)[4];

Обратите внимание, что в зависимости от типа это не «указатель на двумерный массив void *», очень похоже на char**, не «указатель на одномерный массив char *».Но, сохраняя способ, которым вы делаете это в одномерном случае (указывая на первый элемент), это объявление, которое вам нужно.

0 голосов
/ 24 сентября 2010
void *testpanel_pointers[1][4] = {};

void* (*p)[1][4]; //pointer to a two dimensional array of pointers to void
p = &testpanel_pointers;
...