我正在尝试理解这个用于修改队列的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
是什么意思?我知道 - >是一个指向结构成员引用的指针,但我已经迷失在这里发生了什么。我感谢任何提示或建议。
答案 0 :(得分:5)
QUEUE** qptr
表示qptr
是指向QUEUE
的指针(无论是什么)。
*qptr
是“qptr
指向的内存”,因此是指向QUEUE
的指针。
x->y
与(*x).y
相同。换句话说,“接受x
指向的事物,然后获取其y
”。请参阅https://stackoverflow.com/a/3479169/383402以供参考。
因此, 额外的间接层是这样的,函数可以有效地返回(*qptr)->head
是head
的{{1}}, QUEUE
所指向的指向的是qptr
。 / p>
QUEUE*
。为了返回QUEUE*
,它会接收QUEUE**
,并使其指向新分配的内存。