C 理解空指针
鉴于以下情况:C 理解空指针,c,pointers,null,C,Pointers,Null,鉴于以下情况: 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; } 我的问题是:如果(p1->b.c==NULL),怎么可能有(p2!=NULL)
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;
}
我的问题是:如果(p1->b.c==NULL),怎么可能有(p2!=NULL),如果取消引用(使用)不引用任何对象的指针是未定义的行为
int main()
{
A *p1;
D *p2;
p2 = &p1->b.c->d; // <- undefined behaviour anything can happen as p1 value is undetermined
}
PS-代码中任何地方都没有空指针。因此,实际上我不理解这个问题,在哪里设置了
NULL
?我所看到的是一个未初始化的p1
,用于p2
?的赋值,因为取消引用未初始化和空指针是未定义的行为。这意味着程序可能会崩溃,或者它可能会将0
放入p2
中,或者它可能会将非零值放入p2
中,或者它可能是任何其他未定义的行为。p2
尚未分配值。您不能取消对它的引用。
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;
}