最近在看linux-0.11源码,发现struct task_struct和struct m_inode各有一个指向对方的指针作为成员,当时觉得很矛盾,于是写了代码验证。
#include<stdio.h>
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。也就是说,这样写是合法的,而且可能会造成循环。
网友评论