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