簡體   English   中英

棘手的隊列功能C代碼,指針發生了什么?

[英]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)->headhead中的QUEUE ,其是由被指向的東西指着qptr

間接的額外層是,以便函數可以有效地返回QUEUE* 為了返回QUEUE* ,它接受QUEUE** ,並使其指向新分配的內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM