1

我尝试在另一个结构中访问“下一个”,但尽管我尝试了很多方法但失败了。

这是嵌套结构:

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;

因此,您将next通过.运算符取消引用 as d->list.next。取消引用的第一级即d->list需要->操作符,因为d它被定义为指针。对于next,因为list是一个对象而不是一个指针,所以你必须使用.操作符。

于 2013-03-26T00:03:14.623 回答