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 ...
随机推荐
- python collections模块详解
参考老顽童博客,他写的很详细,例子也很容易操作和理解. 1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选 ...
- 关于<c:if>没有<c:else>解决方案-转载
<c:if>没有<c:else>可以用<c:choose>来取代结构: <c:choose> <c:when test=""& ...
- python3 怎么统计英文文档常用词?(附解释)
# coding: utf-8 # In[32]: #import requests #from bs4 import BeautifulSoup #res = requests.get(" ...
- LaTex 小技巧
首行缩进 参考:小技巧之--首行缩进 %-------------------------------------------------------------------------------- ...
- Bzoj2510 弱题(矩阵快速幂)
题面(权限题) 题解 一道概率\(dp\),可以设\(f[i][j]\)表示第\(i\)次操作后,标号为\(j\)的小球的期望个数,那么有: \[ \begin{aligned} &f[i][ ...
- Redis学习篇(七)之事务
Redis中的事务 开启事务 MULTI:开启事务,事务块中多条语句会按照顺序放入队列当中,最后由EXEC来执行 MULTI INCT counter1 INCR counter2 INCR coun ...
- ddms 安卓录制
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 屏幕录制, 视频录制 保存为 . 打开 .显示在浏览器里. 设备屏幕捕捉 刷 ...
- 【2-SAT】【DFS】【分类讨论】Gym - 101617K - Unsatisfying
题意:给你一张2-SAT,问你加至少几句a V b(不能用非运算)这样的语句,使得其无法全为真. 如果最开始没有左右两项都含非运算的析取表达式,则无解,因为显然你可以对每一项的不含非的那项规定为真,使 ...
- Flask请求上下文源码讲解,简单的群聊单聊web
请求上下文流程图 群聊html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...
- Laravel输出JSON时设定输出字段的几种情况总结
1.如果输出json的时候需要屏蔽某些字段,或则想自定义显示的字段: 1.model里面设置 protected $hidden = ['password'];//要屏蔽的字段 2.model里面设置 ...