这是一个关于数据结构的链表指针赋地址值问题


#include<iostream>
#include<conio.h>
#include<string.h>
#define OK 1
#define MAXSIZE 100
using namespace std;
typedef  int Status;

typedef  struct  
{
char name[5];
float price;    
}Book;

typedef Book ElemType;

typedef  struct LNode
{
ElemType data;
struct LNode *next;


}LNode,*LinkList;
LNode *A;


Status InitList(LNode *L)
{
L=new LNode;
if(!L)
exit(-1);
else
(*L).next=NULL;
return OK;
}

int main()
{
LNode *L;

InitList(L);

cout<<(*L).next;
//下面三行是测试代码,同样给指针赋值为NULL,测试结果,当屏蔽上面代
//码的时候发现,可以出现值。不屏蔽的话,则溢出,执行cout<<(*L).next溢出

int *a;
a=NULL;
cout<<a;




getch();


return 0;
}

给链表结点初始化,给next指针赋值为NULL,并输出next指针地址,运行后程序溢出。
我为了探究原因,设计了指针A给A指针赋值NULL,单处运行测试语句,
程序并没有溢出,并且显示出了一个值。
为什么呢,都是赋值NULL,都是输出指针,区别为啥这么大?

#include<iostream>
#include<conio.h>
#include<string.h>
#define OK 1
#define MAXSIZE 100
using namespace std;
typedef  int Status;

typedef  struct  
{
char name[5];
float price;    
}Book;

typedef Book ElemType;

typedef  struct LNode
{
ElemType data;
struct LNode *next;


}LNode,*LinkList;
LNode *A;


Status InitList(LNode **L)
{
*L=new LNode;
if(!(*L))
exit(-1);
else
(*L)->next=NULL;
return OK;
}

int main()
{
LNode *L;
InitList(&L);
cout<<(*L).next;
//下面三行是测试代码,同样给指针赋值为NULL,测试结果,当屏蔽上面代
//码的时候发现,可以出现值。不屏蔽的话,则溢出,执行cout<<(*L).next溢出

int *a;
a=NULL;
cout<<a;
getch();
return 0;
}

指针的指针作为参数才能修改指针。指针作为参数只能修改值