指针所指向的数据作为函数的输出参数时出现的问题,不知道怎么解释

icais 2005-10-15 02:07:54
具体代码为:
#include <iostream.h>

struct node
{
int data;
node *next;
};

node *Create(void ) //产生一条无序链表
{
node *p1, *p2 ,*head;
int a;
head = 0;
cout<<"产生一条无序链表,请输入数据,以-1结束:";
cin >> a;
while ( a != -1 )
{
p1 = new node;
p1->data = a;
if ( head == 0 )
{ //插入链表的首部
head = p1 ;
p2 = p1 ;
}
else
{ //插入链表尾
p2->next = p1;
p2 = p1;
}
cin >> a;
}
p2->next = 0;
return (head);
}

void Print(const node *head) //输出链表上各结点的数据
{
const node *p;
p = head ;
cout <<"链表上各结点的数据为:\n";
while ( p != 0 )
{
cout <<p->data << '\t';
p= p->next;
}
cout <<"\n";
}

void reverse(node *head)//链表转置
{
node *p1=head,*p2,*p3;
p2=p3=NULL;

while(p2=p1->next)
{
p1->next=p3;
p3=p1;
p1=p2;
}
p1->next=p3;
head=p1;
}

void main(void )
{
node *head ;
head = Create(); //产生一条无序链表
Print(head); //输出链表上的各结点值
reverse(head);//此行出错,只能输出原链表的第一个元素
Print(head);
deletechain(head); //释放链表上各结点占用的内存空间
}

如果将reverse函数改为:
node* reverse(node *head)//转置
{
node *p1=head,*p2,*p3;
p2=p3=NULL;

while(p2=p1->next)
{
p1->next=p3;
p3=p1;
p1=p2;
}
p1->next=p3;
return p1;
}
然后
void main(void )
{
node *head ;
head = Create(); //产生一条无序链表
Print(head); //输出链表上的各结点值
node *p=reverse(head);//此行出错,只能输出原链表的第一个元素
Print(p);
deletechain(head); //释放链表上各结点占用的内存空间
}
则能结果正常。

请问,为什么用指针所指向的数据作为函数的输出参数时会出现的问题?请指教。

...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
icais 2005-10-15
  • 打赏
  • 举报
回复
解释:void reverse(node *head) 相当于node* 变量的值传递,void reverse(node *&head)才是地址传递!
TonnyQ 2005-10-15
  • 打赏
  • 举报
回复
好牛b的程序啊,小弟才疏学浅,孤陋寡闻,没见过如此先进的程序,借助两位打下的指点,看了半天看明白了,长见识了!
JohnTitor 2005-10-15
  • 打赏
  • 举报
回复
改为void reverse(node *&head)试试

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧