Преобразование указателя в двойной указатель в C

#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 .