0

这是大学过去的一篇论文。

有一个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); // ??
}

我不明白的是->in的作用printf。我无法弄清楚实际价值是多少。

4

2 回答 2

3

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

有了这个复杂的结构: d1->succ->succ->pred->value,你最终会得到 的值d2,大概是55

  • d1->succd2
  • Sod1->succ->succ等价于d2->succ,即d3
  • Sod1->succ->succ->pred等价于d3->pred,即d2
  • 所以d1->succ->succ->pred->value等价于d2->value
于 2012-08-01T22:47:30.683 回答
1

a->b在 C 中等于(*a).b

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

在此示例中,d1->succd2,因此d1->succ->succ等于d2->succ,即d3。继续,d1->succ->succ->predd2->succ->prev哪个是d3->prev哪个d2。最后,d1->succ->succ->pred->valued2->value,就是55

于 2012-08-01T22:47:27.343 回答