C++传递指针 值为什么没改变呢?(链表的操作)
#include <iostream>
using namespace std;
class book
{
public:
int b_id;
double b_pic;
book *next;
};
bool bl=true;
book *head=NULL;
book* creat_book(int id,double pic,book *Front)
{
book *b=new book;
if(bl)
{
b->b_id=id;
b->b_pic=pic;
b->next=NULL;
bl=false;
head=b;
}else
{
b->b_id=id;
b->b_pic=pic;
b->next=NULL;
Front->next=b;
bl=false;
}
return b;
}
void show_book_info(book *info_p)
{
cout<<info_p<<endl;
while(info_p!=NULL)
{
cout<<"id\t"<<info_p->b_id;
cout<<"\tpic\t"<<info_p->b_pic<<endl;
info_p=info_p->next;
}
}
void delete_book(book *head_delete,int number)
{
book *p=NULL;
while(head_delete!=NULL)
{
if(head_delete->next->b_id==number)
{
head_delete->next=head_delete->next->next;
p=head_delete->next;
//delete p;
cout<<"删除指定的id成功"<<endl;
return;
}
head_delete=head_delete->next;
}
}
void insert_book(book *he,int id,double pic)
{
book *h=he;
book *p=new book;
while(h->next!=NULL)
{
h=h->next;
}
p->b_id=id;
p->b_pic=pic;
p->next=NULL;
cout<<"插入成功"<<endl;
}
int main()
{
book *p=NULL;
p=creat_book(1,1,NULL);
int esc=1;
while(esc==1)
{
cout<<"是否录入? 是:1 否:0"<<endl;
cin>>esc;
if(esc==1)
{
int id;
double pic;
cout<<"ID"<<endl;
cin>>id;
cout<<"PIC"<<endl;
cin>>pic;
p=creat_book(id,pic,p);
}
}
show_book_info(::head); /*函数的参数是传递指针,函数里面已经改变指针head的值了,为 什么下面的函数又能正确的使用head指针呢?*/
delete_book(::head,3);
show_book_info(::head);
insert_book(::head,3,33);
show_book_info(::head);
return 0;
}
[解决办法]
看来你还是对传参的概念没搞明白。
你传指针,是传的指针的值得拷贝,也就是形参和实参指向同一个地址,可以改指针指向地址的内容。
但是你要想修改指针本身,即指针的值,就得传指针的指针,或者传引用