I am a primer to c programming and reading c primer: 5th edition. What confuse me is why `plist` as a pointer to List can also point to Node? 

sorry, I did not paste function ListItemCount to the code block. In this function, `Node * pnode = *plist;`, Does that mean `plist` was converted as a ponter point to `Node` ? If so, why does the program need to convert to a pointer to node instead of assigning `plist->head` to `pnode`(a pointer to Node)?

```
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;
}

```