这是关于C++中指针的一个小混乱,而将它们与null进行比较。
代码如下:
struct node
{
int data;
struct node *left;
struct node *right;
}
int main()
{
struct node *p;
if(p!= NULL)
printf("line1\n");
else
printf("line2\n");
struct node *temp;
if(temp == NULL)
printf("line3\n");
}
输出:
line2
line3
而对于下面的代码:
struct node
{
int data;
struct node *left;
struct node *right;
}
int main()
{
struct node *p;
if(p!= NULL)
printf("line1\n");
else
printf("line2\n");
struct node *temp;
}
这是输出:
line1
有人能解释一下发生这种事的原因吗?
最佳答案
auto
变量(即未声明的局部变量)如static
和p
未初始化,因此它们的值是不确定的(本质上,上一个操作在该特定内存单元中留下的任何位字符串,对于给定类型来说可能是或可能不是有效值)千万不要试图解除对未初始化指针的引用。
在文件作用域(任何函数块之外)或使用temp
关键字声明的变量初始化如下:
指针初始化为空;
算术类型(整数或浮点)初始化为0
根据前两个规则递归初始化结构
联合根据前两个规则递归地初始化其第一个命名成员
如果您将static
的声明更改为
static struct node *p;
然后
p
将被初始化为空。如果不想将p
声明为p
,则必须将其初始化为声明的一部分:struct node *p = NULL;