我正在学习,在网上的某个地方我看到了“循环”的例子,我有三个问题(基于下面的代码):

struct A {
    struct B* b; //does not work if it is not a pointer
    int data;
};

struct B {
    struct A* a; //does not work if it is not a pointer
    int data;
};

int main(void)
{
    struct A sA;
    struct B sB;

    sA.b = &sB;
    sB.a = &sA;

    sA.b->data = 1;
    sB.a->data = 2;

    printf("a = %d, b = %d", sA.b->data, sB.a->data);
}

1)为什么struct成员是指针?如果不是指针,它就不会编译。
2)我是否正确声明和使用了structs?
3)我不知道这种习惯用法的潜在用例是什么。你能给我举几个例子吗?

最佳答案

为什么内部结构应该是一个指针,没有指针就不能编译。
编译器需要知道数据类型的大小,并根据其成员的大小来计算。它知道指向struct的指针的大小,即使它还没有看到struct,但它不知道struct本身的大小。
我声明并正确使用了结构吗?
乍一看还不错。你编译了吗?您的代码是否按预期运行?
我不知道这种习惯用法的潜在用例是什么。你能给我举几个例子吗?
链表是最简单和最常见的示例(Astruct包含指向同一类型Astruct的指针)。

07-24 09:46
查看更多