我正在学习,在网上的某个地方我看到了“循环”的例子,我有三个问题(基于下面的代码):
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)我是否正确声明和使用了
struct
s?3)我不知道这种习惯用法的潜在用例是什么。你能给我举几个例子吗?
最佳答案
为什么内部结构应该是一个指针,没有指针就不能编译。
编译器需要知道数据类型的大小,并根据其成员的大小来计算。它知道指向struct
的指针的大小,即使它还没有看到struct
,但它不知道struct
本身的大小。
我声明并正确使用了结构吗?
乍一看还不错。你编译了吗?您的代码是否按预期运行?
我不知道这种习惯用法的潜在用例是什么。你能给我举几个例子吗?
链表是最简单和最常见的示例(Astruct
包含指向同一类型Astruct
的指针)。