给定以下场景:
typedef struct d
{
int x;
} D;
typedef struct c
{
D d;
} C;
typedef struct b
{
struct c *c;
} B;
typedef struct a
{
B b;
} A;
int main()
{
A *p1;
D *p2;
p2 = &p1->b.c->d;
}
我的问题是:怎么可能有(p2!=NULL(IF(p1->b.c==NULL(?
如果取消引用(使用(不引用任何对象的指针是未定义行为。
int main()
{
A *p1;
D *p2;
p2 = &p1->b.c->d; // <- undefined behaviour anything can happen as p1 value is undetermined
}
您应该做的是首先初始化变量。
int main()
{
A a1;
B b1;
C c1;
D d1;
A *p1 = &a1;
D *p2;
p1 -> b = b1;
p1 -> b.c = &c1;
p1 -> b.c -> d = d1;
p2 = &p1 -> b.c -> d;
}
PS-代码中的任何位置都没有NULL指针。所以实际上我不明白这个问题,