这是来自大学的一篇论文。
初始化struct
:
struct double {int value; struct * double pred; struct * double succ;};
然后在主要功能中:
main(...)
{
struct double * d1, * d2, * d3;
d1 = newDouble(33);
d2 = newDouble(55);
d3 = newDouble(77);
d1 -> succ = d2;
d2 -> pred = d1;
d2 -> succ = d3;
d3 -> pred = d2;
printf("%d/n", d1->succ->succ->pred->value); // ??
}
我不明白->
在printf
中的作用。我无法弄清楚实际价值是什么。
答案 0 :(得分:3)
->
取消引用访问字段的指针:d1->succ
是(*d1).succ
的简写。
使用这个错综复杂的结构:d1->succ->succ->pred->value
,您最终会得到d2
的值,大概是55
:
d1->succ
是d2
。d1->succ->succ
相当于d2->succ
,即d3
。d1->succ->succ->pred
相当于d3->pred
,即d2
。d1->succ->succ->pred->value
相当于d2->value
。答案 1 :(得分:1)
a->b
等于(*a).b
。
这意味着,您将取消引用指针a
,并获取它指向的结构的b
成员。
在此示例中,d1->succ
为d2
,因此d1->succ->succ
等于d2->succ
,即d3
。继续,d1->succ->succ->pred
为d2->succ->prev
,d3->prev
为d2
。最后,d1->succ->succ->pred->value
为d2->value
,即55
。