4

ノードの構造にvoidへのポインタが含まれている二重リンクリストを操作するには、いくつかの助けが必要です。ノードの実際のデータを挿入する別の構造を定義する場合、それをvoidへのポインターに割り当てるにはどうすればよいですか?また、リストを印刷するにはどうすればよいですか?

ヘッダーファイルで定義されたノードの構造:

typedef struct nodetype
{
    struct nodetype *prev, *next;
    void *data;
} NodeT;

main.cで定義されている、各ノードに挿入するデータの構造:

typedef struct dataStructure
{
    int birthday;
    char *name;
}
4

1 に答える 1

4

2番目のtypedefを適切に定義する必要があります。

typedef struct dataStructure
{
    int birthday;
    char *name;
} dataStructure;

次に、構造を割り当て/定義したら、通常どおり、最初のタイプのポインターを2番目のタイプに設定できます。

dataStructure mydatastruct;
node->data = &mydatastruct;  //(void *) can point to anything

また

node->data = malloc(sizeof (dataStructure));  // direct allocation

(dataStructure *)ノード構造を介してデータ構造のメンバーにアクセスする場合は、voidポインターをキャストする必要があります。

((dataStructure *)node->data)->birthday = 1980;

マクロは、これを醜くするのに役立ちます。

ノード構造がそのデータ構造のみを指す場合は、voidポインターを使用するよりも、直接ポイントする方がはるかに簡単です。

于 2013-03-15T19:48:29.880 に答える