*&是什么意思----C++

&在变量定义区,表示引用。
int a=1, *p=&a ; //这里&作用在x上, 是取地址符
&在变量操作区,表示取地址符,如:
int &x ; //引用
&在变量操作区,表示取地址符

这里主要讲引用
函数 btree & tr 等价于tree *& tr
其实我理解就是对于实参地址的引用,所以可以更改
但这里如果直接写tree * tr为什么错了,我曾思考了很久,查资料,发现应该是如果我们在主函数直接定义了一个指针,例如

tree *tre;

这个指针本身不是有效的地址(虚拟指针),如果把它传入函数中,本身这个指针没有开辟空间,如果把这个指针位置传进函数,在开辟新空间时重新分配内存,传入的指针形参改变地址,但本身实参指针所指向的位置并没有变,结果自然不对。

#include<bits/stdc++.h>
using namespace std;
#define status char
typedef struct tree{
  status data;
  struct tree *lchild;
  struct tree *rchild;
}tree,*btree;
void CreatTree(btree & tr)
{
 status ch;
 cin>>ch;
 if(ch=='#')
 {
  tr=NULL ; 
 }
 else{
 tr=new tree;
 tr->data=ch;
 CreatTree(tr->lchild);
 CreatTree(tr->rchild); 
 }
 return ;
}

可直接运行代码
但如果我们主函数里这样写

tree *tre;
tre=new tree;

那么代码改成
void CreatTree(btree * tr)
就可以运行。(当然主函数改成这样后,代码自然也需要稍微修改一下)
修改后可直接运行代码因为分配内存后,地址是一定的,传入后可直接修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值