[英]Tricky C code for queue function, what is happening with the pointers?
我正在嘗試了解用於修改隊列的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
。
x->y
與(*x).y
。 換句話說,“取x
指向的東西,然后取y
”。 請參閱https://stackoverflow.com/a/3479169/383402以獲取參考。
所以, (*qptr)->head
是head
中的QUEUE
,其是由被指向的東西指着qptr
。
間接的額外層是,以便函數可以有效地返回QUEUE*
。 為了返回QUEUE*
,它接受QUEUE**
,並使其指向新分配的內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.