这是关于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变量(即未声明的局部变量)如staticp未初始化,因此它们的值是不确定的(本质上,上一个操作在该特定内存单元中留下的任何位字符串,对于给定类型来说可能是或可能不是有效值)千万不要试图解除对未初始化指针的引用。
在文件作用域(任何函数块之外)或使用temp关键字声明的变量初始化如下:
指针初始化为空;
算术类型(整数或浮点)初始化为0
根据前两个规则递归初始化结构
联合根据前两个规则递归地初始化其第一个命名成员
如果您将static的声明更改为

static struct node *p;

然后p将被初始化为空。如果不想将p声明为p,则必须将其初始化为声明的一部分:
struct node *p = NULL;

09-10 04:32
查看更多