QUEUE** qptr
означает, что qptr
- это указатель на указатель на QUEUE
(что бы это ни было).
*qptr
- это «память, на которую указывает qptr
», чтоТаким образом, указатель на QUEUE
.
x->y
совпадает с (*x).y
.Другими словами, «возьмите вещь, на которую указывает x
, затем получите ее y
».См. https://stackoverflow.com/a/3479169/383402 для справки.
Итак, (*qptr)->head
- это head
из QUEUE
, на который указывает вещь , на которую указывает qptr
.
Дополнительный уровень косвенности таков, что функция может эффективно возвращать QUEUE*
.Чтобы вернуть QUEUE*
, он принимает QUEUE**
и указывает на вновь выделенную память.