用于队列功能的Tricky C代码,指针发生了什么?

Cof*_*fee 0 c debugging code-analysis

我正在尝试理解这个用于修改队列的C代码:

  /*
    * create or delete a queue
    * PARAMETERS: QUEUE **qptr - space for, or pointer to, queue
    * int flag -  1 for create, 0 for delete
    * int size - max elements in queue
    */
    void qManage(QUEUE **qptr, int flag, int size){
         if(flag){
                  /* allocate a new queue */
                  *qptr = malloc(sizeof(QUEUE));
                  (*qptr)->head = (*qptr)->count = 0;
                  (*qptr)->que = malloc(size * sizeof(int));
                  (*qptr)->size = size;
                  }
                  else{
                       // delete the current queue
                       (void) free((*qptr)->que);
                       (void) free(*qptr);
                 }
           }
Run Code Online (Sandbox Code Playgroud)

**qptr参数是什么?什么 (*qptr)->head意思?我知道 - >是一个指向结构成员引用的指针,但我已经迷失在这里发生的事情.我感谢任何提示或建议.

Bor*_*lid 5

QUEUE** qptr意味着它qptr是指向a QUEUE(无论是什么)的指针.

*qptr是"指向的内存qptr",因此是指向a的指针QUEUE.

x->y是一样的(*x).y.换句话说,"拿出指向的东西x,然后得到它y".有关参考,请参阅/sf/answers/243541861/.

所以,(*qptr)->headheadQUEUE这是由东西指向它指向 qptr.

额外的间接层是这样的,函数可以有效地返回一个QUEUE*.为了返回它QUEUE*,它接收a QUEUE**,并使其指向新分配的内存.