请问if(p!=NULL)与if(p)这两个条件语句有什么区别?我在VC中运行时第一种写法会出错,第二种写法运行成功

void Delete(LNode* head) //删除学生信息
{
LNode*p=head,*q;
int ID;
display(head);
cout<<"请输入要删除的学生学号:";
cin>>ID;
while(p!=NULL&&p->data.id!=ID)
{
q=p;
p=p->next;
}
//if(p!=NULL) //出错
if(p) //正确
{
q->next=p->next;
delete p;
cout<<"已删除\n";
display(head);
}
else cout<<"没有找到该学生信息\n";
}

第1个回答  2012-03-02
p 是指针。C++ 定义
#define NULL 0
C 定义
#define NULL ((void*) 0)

p 是指针,p 要初始化。
if(p) -- p 为 0 等于假。非0 等于真
if(p!=NULL) 条件成立为真,不成立为假

如果 while(p!=NULL 没错,if(p!=NULL) 也应当没错
你的错误信息图形看不清。
第2个回答  2012-03-02
if(p!=NULL)与if(p) 的意思是一样的,都是说p不是0时为真
NULL 是个宏,其值为0 如果你程序出错,可能是你没有引用相应的头文件
#include <stdio.h>追问

但是同样的,当我把改为if(p==NULL),然后把两个分支的位置交换之后,执行第一个分支时可以,执行第二个分支就出错了,这是怎么回事?

追答

// if(p) //正确
if( p!=NULL ) //出错 这样有问题???
{
q->next=p->next;
delete p;
cout<<"已删除\n";
display(head);
}
else cout<<"没有找到该学生信息\n";

追问

就是在没有引用#include头文件的情况下,将选择部分改为:
if(p==NULL) coutnext=p->next;
delete p;
cout<<"已删除\n";
display(head);
}
当条件不满足时运行就出错误了,这种情况下条件满足时可以正常运行

追答

出什么错???能不能说清楚些

追问

运行的时候出现了这个东西

追答

啥也看不清啊大侠,要么写出来出错信息,(看样子象是内存错误)
最好把你的全部代码列出来,上面的写法应该不会有问题!

追问

程序太大传不上

本回答被网友采纳
第3个回答  2012-03-02
这两个实现结果一样,但有点区别,p!=NULL 返回的是bool值。
你需要定义 define NULL 0追问

NULL是空指针,无须定义吧

追答

没包含头文件 就要定义