我正在尝试理解用于修改队列的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
所指向的事物所指向的QUEUE
的head
。
额外的间接层使得函数可以有效地返回QUEUE*
。为了返回QUEUE*
,它接收一个QUEUE**
,并使其指向新分配的内存。