тип возврата обхода dlsym ()

справочная страница из dlsym() списки

   *(void **) (&cosine) = dlsym(handle, "cos");

в качестве обходного пути для приведения возвращаемого значения dlsym(),

Что значит *(void **) (&cosine) Вот? я понимаю cosine указатель функции, определенный ранее, но я не уверен, почему амперсанд & нужен перед именем (ошибка без &). Более того, я не понимаю, почему указатель void * (void **) снова используется с *,

1

Решение

Давайте развернем его по очереди:

&cosine

Это берет указатель на переменную cosine, так что это будет указатель на указатель на функцию.

(void **) &cosine

Мы приводим указатель на функцию-указатель на указатель на указатель на пустоту.

* (void **) &cosine

Разыменяем приведенный указатель, присваивая результат dlsym() внутрь.

По сути, то, что происходит, является второстепенным вопросом. Вместо того, чтобы бросать результат dlsym() в правильный тип указателя на функцию, мы притворяемся, что cosine это void * (через уровень косвенности) и назначить ему.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector