C中嵌套结构中的访问项

时间:2013-03-25 23:59:14

标签: c

我尝试在另一个结构中访问“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){}

但这是错的。任何人都可以给我一个访问“下一步”的方法吗? 注意:我无法改变结构。

2 个答案:

答案 0 :(得分:1)

list未被声明为指针,因此您不使用->运算符来获取其成员,而是使用.运算符:

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

另一种解决方法:

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

这样,尝试引用next的原始代码就会编译。

答案 1 :(得分:1)

在您的定义中,您将list定义为对象,如下所示

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

因此,您将通过next运算符将.取消引用为d->list.next。第一级解除引用即d->list需要->运算符d被定义为指针。对于next,由于list是一个对象而不是一个指针,因此您必须使用.运算符。