C++链表向函数传递的头指针无法在函数中改变

(新手学习C++,今天第一次记录学习中所遇到的问题)

首先记录一下这次主要遇到的问题——函数中无法改变head
在写函数时发现在函数中输出head时是改变后的位置,而在函数外输出是却是原head的位置,链表本身在函数中得到改变,而头指针的指向的位置却没有发生改变。

1.首先提供一个最为简便的方法:只需要改变形参的类型,将其转化为对实参的引用,便可达到同样的效果,如图:

A * ord (A *&ahead,B *bhead)

2.直接使用return head也可以实现,在主函数中令head等于返回值

ahead=ord (ahead,bhead);
A * ord (A *ahead,B *bhead)
return ahead; 

3.而我本次的解决方法是将头指针的地址传入函数,如:

ord (&ahead,bhead);
void ord (A **ahead,B *bhead)

注意在函数中使用到head的部分也要进行改变,比如:

 A *a1=*ahead;
 a->next=*ahead;

(原谅我英语单词匮乏,只好用A B)

4.顺便记录一下自己遇到的其他错误:

if (b1->content<=a1->content && a1==ahead) 
	    { A *a=new A;
	      a->content=b1->content;
	      a->next=ahead;
	      ahead=a;
	      break;
		}
else if (b1->content>a1->content && a1->next==NULL)
		{ A *a=new A;
		  a->content=b1->content;
		  a->next=NULL;
		  a1->next=a; 
		  break; 
		}  
else if (b1->content>a1->content && b1->content<=a1->next->content)
		{ A *a=new A;
		  a->content=b1->content;
		  a->next=a1->next;
		  a1->next=a;
		  break;
		}

此为 while 中的三个 if 语句,由于再第一次写的时候将二三句位置颠倒,导致在判断是否为最后一个结点前先进行了第三句的判断,使得整个程序在这个函数中死掉了==,提醒自己以后写 if 语句的时候注意几个条件判断的先后顺序(比如此题无下一个结点就无法判断与下一个结点值的大小了)

回顾自己学习C++已经有三个月了,从刚开始简单的a+b到后来一步步理解程序中各部分的含义,第一次学习函数时的激动,每一次自己写出的程序跑出来时的兴奋(以及前几天玩自己的1024的快乐)。而自己的之前错误也没有记录(不过都是些比较傻的),比如 if 后面不写括号忙活半天,乱改变量的名称导致找半天错误,这次的错误确实比较有记录意义,也比较方便自己以后查看,以后遇到错误就多多记录啦!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值