node *p=NULL 是什么意思

node *p=NULL和p->link=NULL是什么关系?
p->link=0和p->link=NULL是一回事吗?
#include<iostream>
using namespace std;

struct Node{
int data;
Node *next;
};
int Insert(Node *&myList,int value){
Node *newnode=new Node;
newnode->data=value;
newnode->next=myList;
myList=newnode;
return 1;
}
int Find(Node *p,int value)
{
int m=0;
while(p!=NULL&&p->data!=value)
{
p=p->next;
m++;
}
return m;
}
void Pout(Node *p)
{
if(p->next==0)cout<<"链表空!";
while(p!=0)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main(){
int temp;
Node *head=NULL;
Insert(head,7);
Insert(head,5);
Insert(head,3);
Insert(head,1);
Insert(head,9);
Pout(head);
temp=Find(head,9);
cout<<"temp="<<temp<<endl;
temp=Find(head,7);
cout<<"temp="<<temp<<endl;
cout<<endl;
system("pause");
}

就是定义了一个node类型的结构体指针p,并将指针p初始化为空。

指针之所以需要初始化是为了避免野指针的出现,而null其实就是字符串'\0',就是为空的意思,也可以分两部写,如:
node *p;
p=NULL;
这两种写法是一样的,只不过一个是定义的同时直接赋值为空,一个是线定义指针,再定义为空,一样的
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-12-06
p->link=0和p->link=NULL是同一回事
NULL就是'\0',就是0

node *p=NULL不合法……

给你个程序你试一下就知道了
#include<stdio.h>

struct student {
struct student *next;
};

main()
{
int i;
struct student stu[3]={

{0},
{0},
{0}

};
for(i=0;i<3;i++)
{
if(stu[i].next=='\0'&&stu[i].next==NULL) printf("NULL ");
}
}追问

node *p=NULL是合法的

追答

你的p指针不是指向一个结构体?
当p指向一个结构体时是不合法的
我使用VS2010和TC都试过

追问

你看问题补充里的程序,是可以运行的

追答

Node *head=NULL;
是指针的声明与初始化……
功能上等价于下面的语句
Node *head;
head=NULL;

追问

就是head=NULL是什么意思啊。。。不是link=null吧?

追答

node *p=NULL;//指针p指向地址为0的内存空间

p->link=NULL;//指针p指向一个对象,该对象中有一个指针link指向了地址为0的内存空间

这两个没什么关系

本回答被提问者采纳
第2个回答  2012-06-07
p->link=0和p->link=NULL不是一回事,前者为0并不是空,空和0是不同的概念!
第3个回答  2019-08-27
北漂的心酸,公众号,最新node.js从入门到精通及服务器搭建课程
相似回答