c语言之两个结构体中含有指向对方的指针成员

最近在看linux-0.11源码,发现struct task_struct和struct m_inode各有一个指向对方的指针作为成员,当时觉得很矛盾,于是写了代码验证。


#include

struct A;

struct B

{

struct A *a;

int bb;

};

struct A

{

struct B *b;

int aa;

};

int main()

{

struct A AA;

struct B BB;

BB.a = &AA;

AA.b = &BB;

//BB.a->b->a->b->bb = 1;

BB.bb = 2;          //这里和下面要输出的其实是一个变量

printf("%d\n", BB.a->b->a->b->bb);

return 0;

}


编译运行都没有错误,输出结果是2。也就是说,这样写是合法的,而且可能会造成循环。

你可能感兴趣的:(c语言之两个结构体中含有指向对方的指针成员)