我是c编程和阅读c入门的入门书:第5版。令我困惑的是为什么plist
作为指向List的指针还可以指向Node?为什么指向List的指针也可以指向Node?
对不起,我没有将函数ListItemCount粘贴到代码块。在这个函数中,Node * pnode = *plist;
,这是否意味着plist
被转换为Node
?如果是这样,为什么程序需要转换为指向节点的指针,而不是将plist->head
指定为pnode
(指向节点的指针)?
typedef struct film {
char title[TSIZE];
int rating;
} Item;
typedef struct node{
Item item;
// typical usage
struct node * next;
} Node;
/*
* Note: to manage a linked list, we need a pointer to its beginning,
* and we've used typedef to make List the name for a pointer of this
* type.
*/
typedef struct list{
// should point to linked list Node
Node * head;
int size;
} List;
// TODO why `plist` as a pointer to List can also point to Node?
/* returns number of nodes */
unsigned int ListItemCount(const List * plist)
{
unsigned int count = 0;
Node * pnode = *plist; /* set to start of list */
while (pnode != NULL)
{
++count;
pnode = pnode->next; /* set to next node */
}
return count;
}
指针可以指向任何东西。当你试图从所述指针读取“有意义的”数据时,事情就会出错。如果你试图将'List'指针转换为'Node'指针,你肯定会得到一些编译器警告。 –
它不能,不是真的。为什么你这么想?你能详细说明一下你会困惑吗? –
在你的代码片段'plist'根本不使用。 – VTT