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;
- }
C++ 函数参数中“ *&代表什么? ”的更多相关文章
- python函数参数中带有默认参数list的坑
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 def f(x,l=[]): for i in range(x): l.append(i*i) print(l) print( ...
- (转)python中函数参数中如果带有默认参数list的特殊情况
在python中函数参数中如果带有默认参数list遇到问题 先看一段代码 1 2 3 4 5 6 7 8 9 def f(x,l=[]): for i in range(x): ...
- 关于cmp函数参数中的&符号
关于cmp函数参数中的&符号 关于sort函数中的cmp函数有着不同的写法,以刚刚的整形元素比较为例 还有人是这么写的: bool cmp(const int &a, const in ...
- Python函数参数中的冒号与箭头
在一些Python的工程项目中,我们会看到函数参数中会有冒号,有的函数后面会跟着一个箭头,你可能会疑惑,这些都是什么东西? 其实函数参数中的冒号是参数的类型建议符,告诉程序员希望传入的实参的类型.函数 ...
- Delphi 中 函数参数中的 const 修饰符的本质以及注意事项
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------ ...
- javascript 在一个函数参数中包含另一个函数的引用
javascript函数的参数包含另一个函数的情形: <script> //b函数的参数func为另一个函数 function b(a, func) { alert(a); //调用参数 ...
- C++函数参数中的省略号
本文基本是转载自:https://blog.csdn.net/think12/article/details/5785066 另一篇看到写得很好的博客:https://www.cnblogs.com/ ...
- 【VS开发】程序如何捕捉signal函数参数中指定的信号
当说到signal的功能时,我们都知道它会捕捉我们所指定的信号,然后调用我们所指定的信号处理函数.但它是如何捕捉我们指定的信号的呢?下面我就以msdn上关于signal的example为例,说明sig ...
- C# 函数参数中的this
先看下面的代码: public static class StringExtension { public static void Foo(this string s) { Console.Write ...
随机推荐
- lr_get_transaction_duration 函数介绍
lr_get_transaction_duration 用于获取事务所消耗的时间. 实例: Action() { double trans_time; //定义变量 web_url("www ...
- Java StringJoiner
Java StringJoiner Java added a new final class StringJoiner in java.util package. It is used to cons ...
- 现在就能投入使用的12个高端大气上档次的CSS3特性
原文:http://tutorialzine.com/2013/10/12-awesome-css3-features-you-can-finally-use/ 原文中有demo展示及下载. 翻译开始 ...
- 《java虚拟机》----java内存区域与内存溢出异常
No1: java虚拟机所管理的内存将会包括以下几个运行时数据区域 1.方法区 2.虚拟机栈 3.本地方法栈 4.堆 5.程序计数器 No2: 程序计数器: 程序计数器(Program Counter ...
- XAML实时显示更新插件LiveXAML
XAML实时显示更新插件LiveXAML LiveXAML是Visual Studio的第三方扩展插件.该插件可以从Visual Studio Marketplace下载,也可以从官网下载http: ...
- linux下如何配置TCP参数设置详解
设置tcp参数一定要小心谨慎,轻易不要更改线上环境,我贴一下我们线上环境中,sysctl.conf的内容,见文章底部 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tc ...
- Ubuntu下查看软件版本及安装位置
查看软件版本: XXX --version 或 aptitude show xxx 也可用apt-show-versions (要先安装sudo apt-get install apt-show-ve ...
- (bc 1001) hdu 6015 skip the class
Skip the Class Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) T ...
- Python return语句 函数返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...
- 「WC2010」重建计划(长链剖分/点分治)
「WC2010」重建计划(长链剖分/点分治) 题目描述 有一棵大小为 \(n\) 的树,给定 \(L, R\) ,要求找到一条长度在 \([L, R]\) 的路径,并且路径上边权的平均值最大 \(1 ...