我尝试在另一个结构中访问“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){}
但这是错的。任何人都可以给我一个访问“下一步”的方法吗? 注意:我无法改变结构。
答案 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
是一个对象而不是一个指针,因此您必须使用.
运算符。