C++ 函數參數中“ *&代表什嗎? ”

來源:互聯網
上載者:User

標籤:char   引入   變數   clu   while   names   word   作用   eof   

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中的&表明引用實參,即代表實參的一個別名。 操作引用變數就相當於操作實參變數



 */

利用前序和中序求二叉樹(原始碼):

    1.  #include <iostream>
    2.  #include <cstdio>
    3.  #include <cstdlib>
    4.  #include <cstring>
    5.  using namespace std;;
    6.   
    7.  const int N=31;
    8.   
    9.   
    10.   
    11.  typedef struct BitNode
    12.  {
    13.   char value;
    14.   BitNode *lchild,*rchild;
    15.  }BitNode,*BiTree;
    16.   
    17.  /* *&代表什嗎?
    18.   
    19.   這是C++的文法寫法,&在形參中表示“引用”實參,
    20.  LNode * &lst ; 中LNode * 是個整體,表示變數類型是LNode類指標, &lst中的&表明引用實參,即代表實參的一個別名。
    21.  標準C是不支援這種寫法的。
    22.   
    23.  追問
    24.   
    25.  &不是取地址符嗎? 引用參數是什麼意思
    26.   
    27.  追答
    28.   
    29.  &在變數定義區,表示引用,要注意它的用法,
    30.  &在變數操作區,表示取地址符,如:
    31.   
    32.  int x=10, *p=&x ; //這裡&作用在x上, 是取地址符
    33.  int &x ; //引用是C++引入的一個新特性,你要學的不是C++,則上述代碼你是搞不懂的。 這裡的&就表示引用。 一般這種形式會在形參中出現。
    34.   
    35.  LNode * &lst ; 中LNode * 是個整體,表示變數類型是LNode類指標, &lst中的&表明引用實參,即代表實參的一個別名。 操作引用變數就相當於操作實參變數
    36.   
    37.   
    38.   
    39.   */
    40.   
    41.  void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)
    42.  {
    43.   if(l1<=r1&&l2<=r2)
    44.   {
    45.   int key=pre[l1];
    46.   int midIndex=-1;
    47.   for(int i=l2;i<=r2;i++)
    48.   {
    49.   if(in[i]==key)
    50.   {
    51.   midIndex=i;
    52.   break;
    53.   }
    54.   }
    55.   root=(BitNode *)malloc(sizeof(BitNode));
    56.   root->value=key;
    57.   root->lchild=NULL;
    58.   root->rchild=NULL;
    59.   int llen=midIndex-l2;
    60.   CreatTree(root->lchild, pre, l1+1, l1+llen, in, l2, midIndex-1);
    61.   CreatTree(root->rchild, pre, l1+llen+1, r1, in, midIndex+1, r2);
    62.   }
    63.  }
    64.   
    65.  void postOrderTraverse(BitNode *&root)
    66.  {
    67.   if(root->lchild)
    68.   postOrderTraverse(root->lchild);
    69.   if(root->rchild)
    70.   postOrderTraverse(root->rchild);
    71.   printf("%c",root->value);
    72.  }
    73.   
    74.  int main()
    75.  {
    76.   char pre[N],in[N];
    77.   while(scanf("%s",pre)!=EOF)
    78.   {
    79.   scanf("%s",in);
    80.   int len1=strlen(pre);
    81.   int len2=strlen(in);
    82.   BitNode *root=NULL;
    83.   CreatTree(root,pre,0,len1-1,in,0,len2-1);
    84.   postOrderTraverse(root);
    85.   printf("\n");
    86.   }
    87.   return 0;
    88.  }

C++ 函數參數中“ *&代表什嗎? ”

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.