队列函数的C代码,指针发生了什么



我正在尝试理解用于修改队列的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参数是什么?(*qptr)->head是什么意思?我知道->是指向结构成员引用的指针,但我不知道这里发生了什么。我很感激任何提示或建议。

QUEUE** qptr意味着qptr是指向QUEUE的指针的指针(不管是什么)。

*qptr是"qptr指向的内存",因此它是指向QUEUE的指针。

CCD_ 9与CCD_。换言之,"取x指向的东西,然后得到它的y"。看见https://stackoverflow.com/a/3479169/383402以供参考。

因此,(*qptr)->head是由qptr所指向的事物所指向的QUEUEhead

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

最新更新