#c #pointers #memory-management
#c #указатели #управление памятью
Вопрос:
Я хотел бы вызвать метод со следующей подписью.
error (*handler)(obj **, const char *, void*)
Поскольку context
переменная является указателем, ее необходимо преобразовать в указатель на указатель. Однако выполнение этого следующим образом выдает ошибку компиляции gfserver.c:185:20: error: invalid type argument of unary ‘*’ (have ‘gfcontext_t {aka struct gfcontext_t}’)
. Как этот указатель может быть преобразован в двойной указатель?
obj *context = (obj *)malloc(sizeof(obj));
m->handler(**context, request, handlerarg);
Ответ №1:
Для любого указателя (или массива) p
и индекса i
выражение *(p i)
в точности равно p[i]
. Из этого следует, что *p
равно p[0]
.
Помещенный в контекст (каламбур не предназначен) вашего вопроса, **context
тогда был бы равен context[0][0]
, что не имеет смысла.
Кажется, вам следует использовать оператор address-of amp;
, чтобы получить указатель на указатель. Как в amp;context
.