C++ 引用变量
来源:互联网 发布:淘宝搜索关键词看福利 编辑:程序博客网 时间:2024/05/22 13:02
转载自:http://blog.csdn.net/ztk881012/article/details/17627785
引用的定义:
引用是定义已定义的变量的别名(另一个名称)。
引用一般用途:
引用变量的主要用途是用作函数的形参,通过将引用变量做参数,函数将使用原始数据,而不是拷贝。
创建引用变量:
int i;
int & j = i; 此处& 符号不是地址符 是用来类型标识符的一部分,就像声明中的int*指向int的指针,int& 是指向int的引用。
以上代码等价于 int* const j= i;不同之处在于必须在声明引用时将其初始化,而不是像指针一样,先声明再赋值。可以通过初始化声明来设置引用但是不能通过赋值来设置。
int a = 101;
int *pt = &a;
int &r = *pt;
int b = 50;
pt = &b;
将r初始化为*pt使得r指向a,接下来将pt改为指向b,并不能改变r是引用的是a;
用途
将引用用作函数参数:这种传递参数的方法叫,按引用传递。按引用传递允许被调用函数能够访问调用函数中的变量
#include <iostream> void swapr(int &a,int &b);//按引用传递 void swapp(int* a,int* b);//按指针传递 void swapv(int a,int b);//按值传递 using namespace std; int main(){ int a = 100; int b = 300; cout<<"调用函数之前:a = "<<a<<" b = "<<b<<endl; swapr(a,b); cout<<"调用引用:a = "<<a<<" b = "<<b<<endl; swapp(&a,&b); cout<<"调用指针:a = "<<a<<" b = "<<b<<endl; swapv(a,b); cout<<"调用按值:a = "<<a<<" b = "<<b<<endl; system("pause"); return 0; } void swapp(int* a,int* b){ int temp =*a; *a =*b; *b =temp; } void swapr(int &a,int &b){ int temp = a; a = b; b= temp; } void swapv(int a,int b){ int temp = a; a = b; b= temp; }按引用和按值调用相同不同点1:声明不同2.按值传递参数是复制a,b的值,引用是a,b的别名直接操作a,b的地址
引用和指针区别很明显这里不累述了。呵呵。
引用函数的参数不能是表达式(以前的编译器可能用临时变量,现在的一般都是报错不允许用)
如:swapr(a+3,b);//不允许,a+3 不符合要求
应尽可能使用const:
如swapr(const int & a,const int & b);
优点:
1.使用const可以避免无意中修改数据的编程错误
2.使用const是函数可以处理const和非const参数,否则只能接受非const
3.使用const引用可以使函数正确的生成并使用临时变量
#include <iostream> #include <string> using namespace std; string version1(const string& s1,const string& s2); const string& version2(string& s1,const string& s2); const string& version3(string& s1,const string& s2); int main(){ string input; string cpy; string result; cout<<"请输入:"<<endl; getline(cin , input); cpy = input; cout<<"字符串:"<<input<<endl; cout<<"version1"<<endl ; result = version1(input,"**"); cout<<"result = "<<result<<endl; cout<<"input = "<<input<<endl ; cout<<"version2"<<endl ; result = version2(input,"##"); cout<<"result = "<<result<<endl; cout<<"input = "<<input<<endl ; input = cpy; cout<<"version3"<<endl ; //result = version3(input,"@@");//不能调用 cout<<"result = "<<result<<endl; cout<<"input = "<<input<<endl ; system("pause"); return 0; } string version1(const string& s1,const string& s2){ string temp; temp = s2+s1+s2; return temp;//返回一个string字符串 temp的内容将被复制到一个临时返回存储单元中。然后在main中复制给result。 } const string& version2(string& s1,const string& s2){ s1 = s2+s1+s2; return s1;//直接修改s1的值,可以 } const string& version3(string& s1,const string& s2){ string temp; temp = s2+s1+s2; return temp;//虽然temp既不是指针也不是引用但是返回值是 引用因此函数运行结束之后 temp释放(程序试图引用已经释放的内存) }
引用,指针和按值传递该什么时候使用?
(1)使用引用参数的主要情况:
a.程序员能够修改调用函数中的数据对象;
b.通过传递引用而不是整个数据对象,可以提高程序的运行速度。
(2)对于使用传递的值而不做修改的函数:
a.数据对象很小,如内置数据类型或小型结构,则按值传递;
b.数据对象是数据,使用const 指针;
c.数据对象是较大的结构,使用const指针或const引用;
d.数据对象是类对象,使用const引用。
(3)对于修改调用函数中数据的函数:
a.数据对象是内置数据类型,使用指针;
b.数据对象是数组,使用指针;
c.数据对象是结构,使用指针或引用
d.数据对象是类对象,使用引用。
速记:内置类型常规处理,数组用(const)指针,类对象用(const)引用,结构两者都可以
0 0
- 【C++】引用变量
- 【C++】引用变量(1)
- c语言形参中的引用变量
- C语言 变量的跨文件引用
- c++:类中成员变量是引用
- c 指针定义和引用 变量类型
- c语言-指针变量的引用
- c语言在双引号内引用变量
- 【C语言】指针变量的引用
- [C++]引用参数与临时变量
- C++Primer——变量、引用、指针
- C变量的直接引用与间接引用区别
- 引用-利用引用交换两个变量的值【C++】
- C/C++中关于地址、指针和引用变量的学习笔记(十) : 引用型变量
- 变量引用
- 引用变量
- 引用变量
- 引用变量
- DIV各种悬浮
- eclipse 与win 快捷键冲突
- webservices 服务器未能识别 HTTP 头 SOAPAction 的值:.
- flex调试:flash player debug下载版本和chrome设置
- 原原本本的概率论
- C++ 引用变量
- 指针变量、指针、点操作符和箭头操作符
- 数据结构决定着算法
- 适配器模式
- 关于如何去掉fragment_main.xml文件
- opencv----分离旋转参数并计算
- 一次完整的HTTP事务是怎样一个过程?
- OSI模型和TCP/IP的结构图
- Java模式(适配器模式)