因为入参是指针类型,Queue* pq
调用 时就需要传指定类型变量的地址, &是取地址
可以这么理解,因为指针指的是地址,而函数里定义的是q不是数组或指针类型,所以要传递地址。
队列的初始化需要我们做什么呢?将我们封装的结构体里面的变量赋初值!注意对pq的断言,防止发生空指针的解引用。
//队列的初始化
void QueueInit(Queue* pq)
{
//断言
assert(pq);
//赋初值
pq->head = pq->tail = NULL;
pq->size = 0;
}
在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->"的形式来访问传入的队列的头尾指针,并将它们赋值为空。