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

 *&代表什么? 


  这是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;  
}  

参考:https://zhidao.baidu.com/question/2266744263935050308.html

  • 49
    点赞
  • 199
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值