结构指针初始化 - 局部变量

时间:2012-10-24 19:22:43

标签: c pointers structure

有人可以告诉我这里打印的是“你好”吗?据我所知,局部变量是未初始化的。因此,我认为应该打印其他部分,否则就会发生。请帮忙。

struct buss{ 
int a;
char b;
};


void main(){

struct buss *p;

if(p==NULL) printf("hello");

else printf("hi");

}

4 个答案:

答案 0 :(得分:3)

您没有初始化p个对象。它的价值是不确定的。

读取未初始化的对象是未定义的行为。未定义的行为意味着任何事情都会发生。任何事情都意味着您的程序也可能崩溃或打印"nose demons"

编辑:根据评论中的要求,问题"正在读取未初始化的对象总是未定义的行为?":对于C90,请参阅3.16中未定义行为的定义,对于C11,见6.3.2.1p2和C99,见DR#338中C委员会的回答。

答案 1 :(得分:2)

p是一个未初始化的指针并指向某处,恰好是NULL,因此会打印"hello"。 @Ouah解释了为什么你不应该访问p

答案 2 :(得分:1)

您的* p局部变量未初始化,因此它可以随机获取任何值(包括NULL)

此外,在某些条件下,某些编译器可能将此对象初始化为NULL,但标准不要求这样做。所以你最好初始化你的对象。

答案 3 :(得分:1)

严格来说,这是未定义的行为,因为p未初始化。但出于安全原因,许多操作系统不会在堆栈或堆中提供原始(未初始化的)内存块。所以p 总是NULL,在这个简单的例子中(如果你调用了许多子程序,它可能会有所不同)。