#include <stdlib.h>
struct film {
char title[20];
int rating;
};
typedef struct film Item;
typedef struct node {
Item item;
struct node *next;
} Node;
typedef Node *List;
void EmptyTheList(List *plist) {
Node *psave;
while (*plist != NULL) {
psave = (*plist)->next;
free(*plist);
*plist = psave;
}
}
在这段代码中,List
被定义为指向 Node
结构体的指针,因此 List
实际上是一个指向链表头节点的指针,而不是指向指针的指针。
(*plist)->next
和 plist->next
之间的区别是:
(*plist)->next
:(*plist)
解引用了plist
指针所指向的地址,得到了链表的头节点Node
结构体。- 接着
>next
访问了头节点中的next
成员,即下一个节点的指针。
plist->next
:plist
是一个指向链表头节点的指针。- 使用
>next
直接访问了链表头节点中的next
成员,即下一个节点的指针。
总的来说,区别在于 (*plist)->next
中的 *plist
解引用了指针并且访问了结构体成员,而 plist->next
直接通过指针访问结构体成员,两者的效果是一样的,都是访问链表中的下一个节点的指针。