二级指针间的传递
最近在学习队列,在用链表实现的过程中因为指针的传递概念不够清晰而产生异常,进而发现要传递二级指针才行,特此记录。
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 }
感觉还是引用会好看点。。。

浙公网安备 33010602011771号