1

別の構造で「next」にアクセスしようとしましたが、いろいろ試しましたが失敗しました。

ネストされた構造は次のとおりです。

struct list_head {
    struct list_head *next, *prev;
};

typedef struct {
  char *key;
  char *value;
  struct list_head list;
}dict_entry;

「次」にアクセスしたい。新しい dict_entry を初期化します。

dict_entry *d;
while(d->list->next!=NULL){}

しかし、それは間違っていました。その「次」にアクセスする方法を誰か教えてくれませんか? 注:構造を変更できませんでした。

4

2 に答える 2

1

listはポインターとして宣言されていないため、->演算子を使用してそのメンバーを取得するのではなく、次の演算子を使用します.

while (d->list.next != NULL) {
}

別の修正:

typedef struct {
  char *key;
  char *value;
  struct list_head *list;
}dict_entry;

このようにして、参照しようとしている元のコードnextがコンパイルされます。

于 2013-03-26T00:00:11.713 に答える
1

あなたの定義では、list以下のようにオブジェクトになるように定義しています

typedef struct {
    char *key;
    char *value;
    struct list_head list; // This is an object
}dict_entry;

したがって、演算子 asを使用nextして逆参照します。逆参照の最初のレベル、つまり、ポインターとして定義されている演算子が必要です。の場合、 はポインターではなくオブジェクトであるため、演算子を使用する必要があります。.d->list.nextd->list->dnextlist.

于 2013-03-26T00:03:14.623 に答える