私はプログラミングと読書のためのプライマーですプライマー:第5版。何が私を混乱させる理由は、リストへのポインタとしてplist
もノードを指すことができますか?なぜListへのポインタもNodeを指すことができますか?
申し訳ありませんが、私はコードブロックに関数ListItemCountを貼り付けませんでした。この関数のNode * pnode = *plist;
は、plist
がポンターポイントとしてNode
に変換されたことを意味しますか?その場合、plist->head
をpnode
(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;
}
ポインタが何を指すことができます。上記のポインタから "意味のある"データを読み込もうとすると、間違ったことが起こります。 'List'ポインタを' Node'ポインタにキャストしようとすると、間違いなくいくつかのコンパイラの警告が出ます。 –
それはできません。なぜそう思うの?あなたを混乱させるものを詳しく教えてもらえますか? –
コードスニペットで 'plist'はまったく使用されていません。 – VTT