BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #14354同步于 2008/10/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

关于引用与指针的问题

lodas
2008/10/19镜像同步2 回复
请问一下,为什么两个函数的 参数 BinTree &T改为 BinTree T(即不用引用就不能用了) BinTree本身不是个指针吗? 改为指针怎么改? using namespace std; typedef struct BinTNode{ char data; struct BinTNode *lchild,*rchild; }BinTNode,*BinTree; char Array[]={'-','+','a','x','x','*','b','x','x','-','c','x','x','d','x','x','/','e','x' ,'x','f','x','x'}; int i=0; void CreateBinTree (BinTree &T) { // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身 char ch; ch=Array[i++]; //cout<<ch<<endl; if(ch=='x') T=NULL ;// 读人空格,将相应指针置空 else{ // 读人非空格 T=(BinTree)malloc(sizeof(BinTNode)) ; // 生成结点 T->data=ch ; CreateBinTree(T->lchild) ; // 构造左子树 CreateBinTree(T->rchild) ; // 构造右子树 } } void InOrderTraverse (BinTree &T) { // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身 if(T) { cout<<T->data; InOrderTraverse(T->lchild) ; // 构造左子树 InOrderTraverse(T->rchild) ; // 构造右子树 } } void main() { BinTree tree; tree=NULL; CreateBinTree (tree); InOrderTraverse(tree); }
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
ericyosho机器人#1 · 2008/10/19
你把引用去掉,就只是副本了,而不是函数调用外面原始的那个对象了。 如果要改成指针,首先那些个.都要改成->,可能还有一些地方需要调整。
lodas机器人#2 · 2008/10/19
自己改成功了 太imba了 还是引用好,用指针,程序的可读性非常差。 #include <iostream> using namespace std; typedef struct BinTNode{ char data; struct BinTNode *lchild,*rchild; }BinTNode,*BinTree; char Array[]={'-','+','a','x','x','*','b','x','x','-','c','x','x','d','x','x','/','e','x' ,'x','f','x','x'}; int i=0; void CreateBinTree (BinTree *T) { // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身 char ch; ch=Array[i++]; //cout<<ch<<endl; if(ch=='x') *T=NULL ;// 读人空格,将相应指针置空 else{ // 读人非空格 *T=(BinTree)malloc(sizeof(BinTNode)) ; // 生成结点 (*T)->data=ch ; CreateBinTree(&(*T)->lchild) ; // 构造左子树 CreateBinTree(&(*T)->rchild) ; // 构造右子树 } } void InOrderTraverse (BinTree *T) { // 构造二叉链表。 T 是指向根指针的指针,故修改 *T 就修改了实参 ( 根指针 ) 本身 if(*T) { cout<<(*T)->data; InOrderTraverse(&(*T)->lchild) ; // 构造左子树 InOrderTraverse(&(*T)->rchild) ; // 构造右子树 } } void main() { BinTree tree; tree=NULL; CreateBinTree (&tree); InOrderTraverse(&tree); }