Я пытаюсь использовать указатель double void
, но я немного смущен об использовании. У меня есть struct
, который содержит массив void **
.Как правильно использовать указатель 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. ..
Может ли кто-нибудь мне рассказать об этом? Если я сделаю какие-то недопустимые предположения, то не могли бы вы поправить меня?
Почему вы работаете с '' недействительным *? Еще хуже, 'void **'? – Kevin
Может, ему это нужно? –
Кроме того, опции 3 и 4 не совпадают, 3 возвращает 'void **' и 4 возвращает 'void *'. А что такое 'item'? – Kevin