#include<iostream>
#include<conio.h>
#include<string.h>
#define OK 1
#define MAXSIZE 100
using namespace std;
typedef int Status;
#define OK 1
typedef struct
{
char name[5];
float price;
}Book;
typedef struct LNode
{
Book Elem;
LNode *next;
}LNode,*List;
Status InitList(List L)
{
L=new LNode();
if(!L)
exit(-1);
else
(*L).next=NULL;
return OK;
}
int main()
{
LNode L;
List LL;
InitList(LL);
cout<<(*LL).next;
getch();
return 0;
}
请问初始化后,为何溢出呢?
Status InitList(List L)
改成
Status InitList(List &L)
什么溢出?你说cout<<(*LL).next;?,你只初始化了LL,没有初始化(*LL).next
InitList函数你是按值传递,函数运行完了之后main中的指针LL依然是没有初始化的。
//按值传递, L不改变
Status InitList(List L);
//按引用传递,L值改变
Status InitList(List& L);
//按指针传递,L地址指向的值可以改变
Status InitList(List* L);
另外,按值传递不改变的L的原因是在进入函数Status InitList(List L)时,编译器做了一个赋值操作
List L = LL;
这个L在函数内起作用,LL不起作用
如果传入的是LL的地址,使用按指针传递的方式。那么在Initlist函数内改变L的值不会影响LL的值,但由于LL和L是指针,他们的值指向相同的地址,修改L->next或者L->Elem会影响LL->next或者LL->Elem的值。