Я пытаюсь использовать двойной указатель void
, но я немного смущен об использовании.
У меня есть struct
, который содержит массив void **
.
struct Thing{
void ** array;
};
struct Thing * c = malloc (sizeof(struct Thing));
c->array = malloc( 10 * sizeof(void *) );
Итак, если я хочу назначить другой объект каждому указателю и попытаться получить значение
// Option 1
*(c->array + index) = (void *) some_object_ptr;
// Option 2
c->array[index] = (void *) some_object_ptr;
тогда у меня есть другая функция, которая дает (void *) item
, которая указывает на каждую ячейку, а не на some_object_ptr
.
Если я хочу получить значение, на которое указывает some_object_ptr
,
должен ли я делать
function return type is 'void *' and takes argument 'void *'
// Option 3
return (void**) item
// Option 4
return *((void**)item)?
Странно то, что когда я использовал массив, метод индексирования массива я не мог использовать вариант 4, только вариант 3; и когда я использовал *(c->array + index)
, я мог использовать opt.4. и не opt.3...
Кто-нибудь может рассказать мне об этом? Если я сделаю какие-либо недопустимые предположения, то не могли бы вы поправить меня?