二级指针间的传递

最近在学习队列,在用链表实现的过程中因为指针的传递概念不够清晰而产生异常,进而发现要传递二级指针才行,特此记录。

 1  Queue *line; //定义队列
 2   Item temp;
 3   int max = 100;
 4   char ch;
 5   InitializeQueue(max, line);
 6   puts("Testing the Queue interface. Type a to add a value,");
 7   puts("type d to delete a value, and type q to quit.");
 8   while ((ch = getchar()) != 'q')
 9   {
10     if (ch != 'a' && ch != 'd') //忽略其他输出
11       continue;
12     if (ch == 'a')
13     {
14       GetInfo(&temp);
15       EnQueue(&temp, line);
16     }

这里传入InitializeQueue函数的值是line,一级指针。

 

1 //初始化
2 void InitializeQueue(int max, Queue *pq)
3 {
4   pq = (Queue *)malloc(sizeof(Queue));
5   pq->front = pq->rear = NULL; //初始化时队首队尾置为NULL
6   pq->items = 0;               //初始化项数为0
7   pq->maxSize = max;
8 }

 

而在函数内部,此时的pq仅是一个具有当前函数作用域的局部变量,一旦退出函数就消亡,则原先line指向的值未被初始化,此时就相当于当初学的swap函数传递数值本身的情况。

修改方式也简单,参数类型改为二级指针或者加个引用。

1 //初始化
2 void InitializeQueue(int max, Queue **pq)
3 {
4   *pq = (Queue *)malloc(sizeof(Queue));
5   (*pq)->front = (*pq)->rear = NULL; //初始化时队首队尾置为NULL
6   (*pq)->items = 0;                  //初始化项数为0
7   (*pq)->maxSize = max;
8 }

感觉还是引用会好看点。。。

 

posted @ 2020-10-17 10:38  举觞  阅读(204)  评论(0)    收藏  举报