我正试图理解用于修改队列的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);
                 }
           }

什么是**qptr参数?什么意思?我知道->是一个指向结构成员引用的指针,但是我对这里发生的事情一无所知。我很感激你的建议。

最佳答案

QUEUE** qptr表示qptr是指向QUEUE的指针(无论是什么)。
*qptr是“由qptr指向的内存”,因此是指向QUEUE的指针。
x->y(*x).y相同。换言之,“取x所指的事物,然后得到它的y”。参见https://stackoverflow.com/a/3479169/383402以供参考。
因此,(*qptr)->head是指由head所指事物所指的QUEUEqptr
额外的间接层使得函数可以有效地返回QUEUE*。为了返回QUEUE*,它接受一个QUEUE**,并使它指向新分配的内存。

09-25 21:21