c语言数据结构队列的初始化

img


这后边其实是有个 void QueueInit(Queue* pq)的调用函数的,为什么传参数的时候要用&呢,是取地址的意思吗

因为入参是指针类型,Queue* pq
调用 时就需要传指定类型变量的地址, &是取地址

可以这么理解,因为指针指的是地址,而函数里定义的是q不是数组或指针类型,所以要传递地址。

  • 这篇博客也许可以解决你的问题👉 :【C】【Queue】双向链表队列的模拟营业额计算
  • 除此之外, 这篇博客: C语言数据结构初阶(7)----队列中的 4.1 void QueueInit(Queue* pq) 函数的实现 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 队列的初始化需要我们做什么呢?将我们封装的结构体里面的变量赋初值!注意对pq的断言,防止发生空指针的解引用。

    //队列的初始化
    void QueueInit(Queue* pq)
    {
        //断言
        assert(pq);
        //赋初值
        pq->head = pq->tail = NULL;
        pq->size = 0;
    }
  • 以下回答由chatgpt基于相关博客总结生成:

    在C语言中,使用"&"符号可以用来获取一个变量的地址。在传递参数时,如果需要修改该参数的值,就需要传递该参数的地址。而在调用QueueInit函数时,因为需要修改传入的队列参数,所以使用"&"符号获取该队列参数的地址。具体实现方法如下:

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    #include <stdbool.h>
    
    typedef int QueueDataType;   //队列类型
    
    typedef struct QueueNode {
        struct QueueNode* next;  //指向下一个节点
        QueueDataType data;      //数据
    } QueueNode;
    
    typedef struct Queue {
        QueueNode* pHead;        //头指针
        QueueNode* pTail;        //尾指针
    } Queue;
    
    void QueueInit(Queue* pQ);   //队列初始化
    
    int main() {
        Queue q;                  //定义一个Queue类型的变量q
        Queue* pq = &q;           //获取变量q的地址,赋值给指针pq
    
        QueueInit(pq);            //调用QueueInit函数,传入指针pq作为参数
        return 0;
    }
    
    /* 队列初始化:将头尾指针置为NULL */
    void QueueInit(Queue* pQ) {
        assert(pQ);                          //防止传入的pQ为空
    
        pQ->pHead = pQ->pTail = NULL;        //将头尾指针置空
    }
    

    在代码中可以看到,在调用QueueInit函数时,传入的参数为指向队列类型的指针pq,即"&q"。因为需要修改pq指向的队列的值,所以需要传入这个队列的地址。在函数中,可以使用"pQ->"的形式来访问传入的队列的头尾指针,并将它们赋值为空。