作者:球球小白痴_693 | 来源:互联网 | 2023-10-14 14:36
typedef char ElemType;
//树结构
typedef struct tree
{
ElemType data;
struct tree * lchild;
struct tree * rchild;
unsigned int isOut; //专为后序遍历设置的,0为不需要被输出,1为需要被输出
}TreeNode,*Tree;
//创建树,以先序序列建立树
void CreateTree(Tree &t) //我说的指针引用在这
{
char ch;
scanf("%c",&ch);
if ( ch == '#' )
t = NULL;
else
{
t = (Tree)malloc(sizeof(TreeNode));
if ( !t )
{
printf("分配内存出错!");
return ;
}
t->data = ch;
CreateTree(t->lchild);
CreateTree(t->rchild);
}
}
[code=c]
[/code]
//我不懂的地方在于为什么在创建树时 使用了指针的引用,它很神奇,竟然在创建树的函数中不给返回值,而且,当我去掉&时,程序编译通过,执行会异常终止!
8 个解决方案
C直接不能编译;
C++ 指针的引用,是链式结构的福音。
不必再用二级指针了。
引用有指针的能力,而无其弊,刚刚好。
引用是对象的别名,代行对象的权利。
T x;
T &ref =x;
T b =ref;//即T b =x;
T c;
c = ref; //即c =x;
ref =b;//即 x=b;
&ref // 即& x;
除了名字不同,引用可以代替被引用者,做他所能做的事情。
引用参数,也可以代替被引用者,做他所能做的事情。
不受参数值传递的约束。
引用参数不是值传递。
非引用参数,都是值传递。
C没有引用,只有值传递。
C++有了引用,多了引用传递,这一种参数传递手段。
引用传递的实质,是传递地址;
只是表面上,用实参本身做参数,传递给被调函数。
和值传递有本质的区别。
C的指针参数,只是模拟地址传递,语法上还是值传递。
通过传递指针,用指针间接引用指针指向的对象,
C++引用传递,实参即被引用的对象;
形参在被调函数中代表实参本身。
作用和指针差不多。
但是语法上和直接使用实参本身是一致的。
函数调用语法,则和值传递一致。
这表明,引用是一种特殊数据类型。
既不同于指针,也不同于对象。
他代替被引用的对象工作,一切结果,都和被引用的对象自己工作相同。
void InitialBitTree(BitTree * T)
{//初始化二叉树
int n;
cout<<"input n: \n";
cin>>n;
if(n==0)
T=NULL;
else
{
if(!(T=new BitTree))exit(-1);
T->e = n;
InitialBitTree(T->lchild) ;
InitialBitTree(T->rchild) ;
}
}
我用的是整型,没错吖。调用时:
InitialBitTree(T);