(新手学习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 后面不写括号忙活半天,乱改变量的名称导致找半天错误,这次的错误确实比较有记录意义,也比较方便自己以后查看,以后遇到错误就多多记录啦!