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

私が理解していないのは、で何をしているのかということ->ですprintf。実際の値がわからない。

4

2 に答える 2

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です。
于 2012-08-01T22:47:30.683 に答える
1

a->bCのはに等しい(*a).b

つまり、ポインタを逆参照し、それが指す構造体のメンバーをa取得します。b

この例でd1->succは、はd2であるため、は、にd1->succ->succ等しくなります。続けて、どちらがどちらであるかです。結局、は、、つまりです。d2->succd3d1->succ->succ->predd2->succ->prevd3->prevd2d1->succ->succ->pred->valued2->value55

于 2012-08-01T22:47:27.343 に答える