*&是什么意思----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)
就可以运行。(当然主函数改成这样后,代码自然也需要稍微修改一下)
修改后可直接运行代码因为分配内存后,地址是一定的,传入后可直接修改

发布了44 篇原创文章 · 获赞 4 · 访问量 1070

猜你喜欢

转载自blog.csdn.net/qq_44162236/article/details/102791214
今日推荐