这个值是如何计算的?

时间:2012-08-01 22:42:31

标签: c struct

这是来自大学的一篇论文。

初始化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中的作用。我无法弄清楚实际价值是什么。

2 个答案:

答案 0 :(得分:3)

->取消引用访问字段的指针:d1->succ(*d1).succ的简写。

使用这个错综复杂的结构:d1->succ->succ->pred->value,您最终会得到d2的值,大概是55

  • d1->succd2
  • 因此d1->succ->succ相当于d2->succ,即d3
  • 因此d1->succ->succ->pred相当于d3->pred,即d2
  • 因此d1->succ->succ->pred->value相当于d2->value

答案 1 :(得分:1)

C中的

a->b等于(*a).b

这意味着,您将取消引用指针a,并获取它指向的结构的b成员。

在此示例中,d1->succd2,因此d1->succ->succ等于d2->succ,即d3。继续,d1->succ->succ->predd2->succ->prevd3->prevd2。最后,d1->succ->succ->pred->valued2->value,即55