再一次认识到C函数中参数传递:传值。

一般是以swap(int a,int b)引入的 参数传递时传值得,在函数中对参数的修改不对外界产生影响。

于是就引入了传指针和引用。

swap(int *a,int *b)传过来的是指向整型值的指针,这样就可以对他指向的内容操作。

一向以为自己对这些东西掌握得很好,今天写了一个avl树的程序,关于root在构造函数里面定义为root=NULL,在插入节点时,使用的是递归方法,希望把root和普通节点一样进行处理,即插入第一个元素时,为root分配空间。结果每次运行完毕,root总是没有被分配空间。形不成树结构

部分代码:

template<typename Type>
int  AVLTree<Type>::insertAVL(TreeNode* tree, Type data, bool &taller)
{
    if(!tree)
    {
  tree = (TreeNode*)malloc(sizeof(TreeNode));
  
        tree->data=data;
        tree->lchild=NULL;
        tree->rchild=NULL;
        tree->bf=EH;
        taller = true;
    }
    else
    {
        if(data == tree->data)
        {taller=false; return 0;}
        if(data < tree->data)//左子树
        {
           
            if(!insertAVL(tree->lchild,data,taller))
             return 0;//未插入,有相同元素

.......................................................

经过考虑,发现自己还是对传递参数没有把握好。

insertAVL(TreeNode* tree, Type data, bool &taller)
root=NULL, 也就是root=0x00000000;

作为参数传递tree=root,分配空间后

tree=0x123445678。对*tree结构进行初始化

但是当程序结束时,root还是为0x00000000,不会指向其他内存空间。

因为是传值。能改变是只是root指向内存快的内容,比较向int *const tree,是一个指针常量,指针不可改变,但是指向的内容可以改变~

如果希望改变指针内容(指针指向的地址),应该传递** 或者*&,我采用了引用~

template<typename Type>
int  AVLTree<Type>::insertAVL(TreeNode* *tree, Type data, bool &taller)

template<typename Type>
int  AVLTree<Type>::insertAVL(TreeNode*& tree, Type data, bool &taller)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值