引用形参 指针形参
来源:互联网 发布:梦幻西游老是网络错误 编辑:程序博客网 时间:2024/04/28 19:05
引用形参
*是去引用运算符,或称之为间接引用运算符
首先看一下 普通形参
int add1(int a){ return a+1;}void main(){ int num = 10; int num2; num2 = add1(num);}
在这种情况下,num的值不会因为调用了add1而改变,即实参的值不变。
再来看一下 指针参数
void add2(int *p) {*p +=1;} void main(){ int num1; add2(&num1);}
使用指针做为函数的形参,指针的值(即&num1)不会因为*p+=1而受到影响,但是&num1这个地址里存放的值(num)增加了1。所以要想修改实参的值,可以使用指针形参的方法。
但是还有一种更安全更自然的方法-引用形参
引用形参的格式如下面函数所示:
void swap(int &a,int &b) { int temp=a; a=b; b=temp; }
如果在主函数中调用swap()函数:
void main(){ int x = 10, y = 20; swap(x,y);}
那么实参x和y的值会被调换过来,也就是说如上所写的引用形参会修改实参的值。
如果不想修改实参的值,应该加上const,如下面例子所示。
void swap(const int &a,const int &b)
引用形参直接关联到其所绑定的对象,而非这些对象的副本。 所以这种方法可以修改实参的值,而且更加直观。
注:以下内容转自http://www.cppblog.com/liujiajia/archive/2008/07/14/56131.html
使用引用形参的优点:
在向函数传递大对象时,需要使用引用形参。虽然赋值实参对于内置数据类型的对象或者规模较小的类型来说没有什么问题,但是对于大部分的类型或者大型数组,它的效率就比较低了。另外,某些类型是无法复制的。使用引用形参,函数可以直接访问实参对象,而无须复制它。
示例:
bool isShorter(const string &str1,const string &str2)//const
{
return str1.size()<str2.size();
}
由于string对象可能非常的长,我们希望避免复制操作。
如果使用引用形参的唯一目的是避免复制形参,则应将形参定义为const引用。
使用引用形参应该注意的:
int incr(int &val)
{
return ++val;
}
void main(void)
{
short v1=1;
const int v2=10;
int v3=20;
incr(v1); //错误,v1不是int
incr(v2); //错误,v2是const
incr(v3); //正确
incr(10); //错误
}
所以,调用非const类型的引用形参,实参必须不是const类型的,而且实参的类型和形参的类型应当一致。
一个引用形参被翻译成一个指针变量,相应的实参被翻译成这个实参的地址。当在函数中被使用时,指针形参被自动的去引用,从而产生对应实参的别名。(from数据结构与算法分析)
在以上例子中,引用形参 val被翻译成一个指针变量,调用incr(v3)时,v3这个实参被翻译成v3的地址。
- & 引用形参 与 指针
- 引用形参 指针形参
- 指针形参与引用形参
- 函数形参(非引用,指针,引用)
- 函数形参 原型、指针、引用、
- 形参为指针和指针的引用之差别
- 指针形参和传递指向指针的引用
- 指针与引用(函数形参的值传递,引用传递,指针传递)
- 引用,引用形参,指针形参与指向指针的引用形参,内存泄露及free相关
- 引用、指针和指向指针的指针在函数形参中的应用
- 引用形参和指针形参的比较
- 什么时候用指针形参?什么时候用引用形参?
- 函数的形参(非引用形参、指针形参、引用形参)
- C++函数的形参(非引用形参、指针形参、引用形参)
- 函数的形参(非引用形参、指针形参、引用形参)
- 指针形参,引用变量,普通变量比较
- 引用和指针作为形参的区别
- 指针和引用作为形参传递下去的区别
- 手机防盗取消激活的方法
- 更改语言
- 如何使用nodejs提交表单方式的post请求?
- DB基本概念之 --- 索引
- 网站开发过程中解决的小问题--备忘
- 引用形参 指针形参
- javabean和jdbc的使用实例系列(二.1)
- sql语句总结
- 无限导航树
- java加密和数字签名2 私钥加密
- 算法导论Problem6-3 Youngtableau问题 堆排序应用
- ps项目第一天
- 创建一个自己的工具栏 CreateToolbarEx
- storm集群应用1