在做二叉树实验时,当然,开始并不是很懂,所以照着书上码,码完看看效果后,再学习代码。
当看到先序创建二叉树时,发现函数的参数是bitree &t,而bitree本来就是指针了,那这个参数是啥啊,对指针取地址,指针的指针。。。ohno,强迫症是病啊,一直纠结着,发现凡是涉及创建二叉树的都会有这种参数,而对二叉树的操作函数的参数都是这样的参数bitree t。然后就是各种纠结,完全想不通,有必要吗,有bitree t应该就够了啊,想想创建二叉树的过程,没有关系啊,只需节点的指针就行了。还是问问度娘,开始并没有找到很好的答案,因为不知道怎么描述这个问题,事实告诉我们,搜索也是要有技巧的,但最终还是找到了,看来也有不少人纠结啊。
是这样的,这里和分配内存有关,不能用函数的指针参数去申请动态内存,至于原因,有点复杂的样子,编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是 _p,编译器使 _p = p。如果函数体内的程序修改了_p的内容,就导致参数p的内容作相应的修改。这就是指针可以用作输出参数的原因。在本例中,_p申请了新的内存,只是把_p所指的内存地址改变了,但是p丝毫未变,那么对_p指向的内容做出修改时,对p是完全没作用的,因为地址变了。难怪我没加&时,没有树输出。