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

时间:2012-02-01 04:03:09

标签: 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);
                 }
           }

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

1 个答案:

答案 0 :(得分:5)

QUEUE** qptr表示qptr是指向QUEUE的指针(无论是什么)。

*qptr是“qptr指向的内存”,因此是指向QUEUE的指针。

x->y(*x).y相同。换句话说,“接受x指向的事物,然后获取其y”。请参阅https://stackoverflow.com/a/3479169/383402以供参考。

因此,(*qptr)->headhead的{​​{1}}, QUEUE所指向的指向的是qptr。 / p>

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