以二叉树的建立为例,小谈C/C++里的二级指针、一级指针(真~小~谈,很水的)

指针,是C的精髓,但是起码对我来说,实在是很容易搞混弄错的一种存在。以二叉树的几个基本操作为例,来稍微说下指针的含义,做个笔记给以后的自己看

 (好吧,还以为markdown跟html差不多,试了几个还是挺多区别的,很多功能都木有)

废话少说,先看代码:
typedef struct BiTNode  
{    
    char data;    
    struct BiTNode *lchild, *rchild;      //左右孩子    
}BiTNode,*BiTree; 

void CreateBiTree(BiTree &root)    //二级指针作为函数参数    
{    
    char ch; //要插入的数据   
    cin>>ch;   //文件头<iostream> 或用scanf读入(cstdio) 
    if(ch=='#')  
        root= NULL;  
    else  
    {  
        root=new BiTNode;
        (root)->data = ch;  
        printf("请输入%c的左孩子:",ch);  
        CreateBiTree(root->lchild);  
        printf("请输入%c的右孩子:",ch);  
        CreateBiTree(root->rchild);  
    }  
}  
void CreateBiTree(BiTree &root) ,对二叉树的操作与对其他结构体(链表等)类似,即初始化和销毁要用到二级指针,插入、删除、遍历、清空等用一级指针即可。旦&和*的含义会影响到接下来的操作,需要做对应修改。
上面这段传入的形参是以root为一个BiTree(即指向节点BiNode的指针), 传入了BiTree的地址。由于root为指针,所以是可以为空(==NULL)的,new操作时把一个新的节点的地址传回了root。要取root的元素,应用->而不是.  因为它是指针,不是节点。root->lchild是一个指向左孩子(某个节点)的指针,与root等级相同,可以作为形参再次递归调用。(好啰嗦,不可能还看不明白吧。。)
再看这一段:

可以这么理解,要createBiTree,传入的形参是一个二级指针,可以是**root,此时**root是一个BiNode节点,*root是一个指向BiNode的指针,root是一个指向“指向BiNode的指针”的指针,即二级指针。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值