C++ 函数参数中“ *&代表什么? ”

typedef struct BitNode  
{  
    char value;  
    BitNode *lchild,*rchild;    
}BitNode,*BiTree;  


void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)  ;

/*   *&代表什么?  //https://zhidao.baidu.com/question/2266744263935050308.html

  这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。   
标准C是不支持这种写法的。

追问

&不是取地址符吗? 引用参数是什么意思

追答

&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:

int x=10, *p=&x ;  //这里&作用在x上, 是取地址符
int &x  ;   //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。

LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量



 */

利用前序和中序求二叉树(源代码):

#include <iostream>  
#include <cstdio>  
#include <cstdlib>  
#include <cstring>  
using namespace std;;  
 
const int N=31;  
 

 
typedef struct BitNode  
{  
    char value;  
    BitNode *lchild,*rchild;    
}BitNode,*BiTree;  

/*   *&代表什么?  

  这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。   
标准C是不支持这种写法的。

追问

&不是取地址符吗? 引用参数是什么意思

追答

&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:

int x=10, *p=&x ;  //这里&作用在x上, 是取地址符
int &x  ;   //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。

LNode * &lst ;  中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量



 */

void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)  
{  
    if(l1<=r1&&l2<=r2)  
    {  
        int key=pre[l1];  
        int midIndex=-1;  
        for(int i=l2;i<=r2;i++)  
        {  
            if(in[i]==key)  
            {  
                midIndex=i;  
                break;  
            }  
        }  
        root=(BitNode *)malloc(sizeof(BitNode));  
        root->value=key;  
        root->lchild=NULL;  
        root->rchild=NULL;  
        int llen=midIndex-l2;  
        CreatTree(root->lchild, pre, l1+1, l1+llen, in, l2, midIndex-1);  
        CreatTree(root->rchild, pre, l1+llen+1, r1, in, midIndex+1, r2);  
    }  
}  
 
void postOrderTraverse(BitNode *&root)  
{  
    if(root->lchild)  
        postOrderTraverse(root->lchild);  
    if(root->rchild)  
        postOrderTraverse(root->rchild);  
    printf("%c",root->value);  
}  
 
int main()  
{  
    char pre[N],in[N];  
    while(scanf("%s",pre)!=EOF)  
    {  
        scanf("%s",in);  
        int len1=strlen(pre);  
        int len2=strlen(in);  
        BitNode *root=NULL;  
        CreatTree(root,pre,0,len1-1,in,0,len2-1);  
        postOrderTraverse(root);  
        printf("\n");  
    }  
    return 0;  
}  



猜你喜欢

转载自blog.csdn.net/zhuiqiuzhuoyue583/article/details/80450843