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中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量

*/

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

    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.  

      }

原文地址:https://www.cnblogs.com/h2zZhou/p/9565214.html

时间: 2024-11-09 03:21:04

C++ 函数参数中“ *&代表什么? ”的相关文章

Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究

oracle函数参数中=&gt;的含义

作者:iamlaosong 今天看到一个MD5加密的问题,很多语言都提供了加密函数,oracle也提供MD5加密函数,网上搜了一下,加密函数是: DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'abc') 不过,其参数中出现了一个"=>"符号,那么这个符号到底什么意思呢? oracle实参与形参有二种对应方式: 1.一种是位置方式,和面向对象语言参数传递类似: 2.另外一种是=> 作为形参对应,因为位置对应方法有缺限,比如一个

【C语言】函数参数中的const修饰符

  通常,字符串操作函数原型中,都会在形参前面加上const修饰符,表示此指针不能用于修改字符串的值   比如:char *strcpy(char *strDest, const char *strSrc)  但是可不可以通过 在函数里定义一个指针指向strSrc,来改掉字符串的值呢? 给出以下代码: #include <STDIO.H> #include<stdlib.h> void fuc(const char *p) { char *q = p; *q='b'; } int

C++数组作为函数参数的几个问题(转)

本文需要解决C++中关于数组的2个问题:1. 数组作为函数参数,传值还是传址?2. 函数参数中的数组元素个数能否确定? 先看下面的代码. #include <iostream> using namespace std; void testArrayArg(int a[]) { cout << endl; cout << "in func..." << endl; cout << "array address: &qu

C语言中值得深入知识点----数组做函数参数、数组名a与&amp;a区别、数组名a的&quot;数据类型&quot;

1.数组作为函数参数 C语言中,数组做为函数的参数,退化为指针.数组作为参数传给函数时,传的是指针而不是数组,传递的是数组的首元素的地址.这里我们以将以整形变量排序来讲解. void sortArray(int a[] ,int num )以及void sortArray(int a[100] ,int num )都可以用void sortArray(int *a ,int num )表示.一般来说函数参数如果为数组,可以有两个参数,一个是数组名,一个是数组长度.对于排序而已,一般是要知道给定数

Python中的函数参数

在讲函数参数之前还是简单的讲一下Python中的可变对象与不可变对象. 一.可变对象与不可变对象 在Python中,一切皆对象,python中不存在所谓的传值调用,一切传递的都是对象的引用,也可以认为是传址.所谓可变对象是指,对象的内容可变,而不可变对象是指对象内容不可变(即在其创建后,值不能改变,但可创建新的对象并以同一变量名对其赋值,而旧的对象会被清理掉,这在python里叫对象的垃圾收集).不可变(immutable):int.字符串(string).float.(数值型number).元

C语言中函数参数为什么是由右往左入栈的?

先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *argv[]) { foo(100, 200, 300);

函数声明和函数定义中的默认参数浅析

默认参数是存在于函数的声明中,还是函数的定义中呢? 我在VS6.0和VS2008下做了如下实验,并做出了简单的总结,有不足或者不准确的地方,欢迎大家拍砖,我会及时修正相关内容. 实验一:默认参数不能同时存在于函数声明和函数定义中. #include <iostream> #include <tchar.h> using namespace std; void SetHeight(double dHeight = 183.5); int _tmain(int argc, TCHAR*

JavaScript中函数参数的按值传递与按引用传递(即按地址传递)

首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址访问内存中对应的值并进行操作,如下图: 其中地址为0x00000016保存的是一个地址,指向地址0x00000036,即0x00000016被开辟为一个指针变量,可以引用0x00000036地址的值,这是按引用方式访问变量:另外一种访问变量的方式是按值访问,即图中0x00000008地址. 在Jav