#include<iostream>
#include<cstring>
using namespace std;
struct phonebook{
char Name[20];
char Number[20];
struct phonebook *next;
};
typedef struct phonebook pbook;
void addmember(pbook *head);
void print_list(pbook *head);
int main()
{
pbook *head=NULL;
for(int i=0;i<2;i++)
addmember(head);
print_list(head);
return 0;
}
void addmember(pbook *head)
{
pbook *curr=NULL,*tmp=NULL;
char name[20],num[20];
cout<<"input Name and number:"<<endl;
cin.getline(name,sizeof(name));
cin.getline(num,sizeof(num));
curr=(pbook *)new(pbook);
curr->next=NULL;
strcpy(curr->Name,name);
strcpy(curr->Number,num);
if(head==NULL)
{
head=curr;
cout<<"save succeed in head"<<endl;
}
else
{
tmp=head;
while(tmp!=NULL)
tmp=tmp->next;
tmp=curr;
cout<<"save succeed in tail"<<endl;
}
}
void print_list(pbook *head)
{
pbook *curr=head;
cout<<"输出链表"<<endl;
while(curr!=NULL)
{
cout<<"Name:"<<curr->Name<<"\tNUmber:"<<curr->Number<<endl;
curr=curr->next;
}
}
额……不是很明白你为什么传参数的时候要传一个空指针进去,空指针的时候就是说
head
的地址还没有分配,当你进入addmember
的时候,你addmember
的局部参数head
(为了区分,下面用head1
来表示吧)的地址还是不固定,直到你将curr
赋值给head1
,但是由于没有固定的地址链接,此时的head1
已经与全局的head
断开了关联,而head1
的作用范围只有在addmember
生效,所以当addmember
执行完成之后head1
就被销毁了,而全局的head
依然为NULL
,所以下一次执行addmember
传进去的依然是空指针。要解决其实也很简单,只需要一开始就把
head
赋值了就可以,或者修改成下面这样也能实现相同的效果: