C++ 引用变量
2014-05-05 10:12
232 查看
转载自: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)引用,结构两者都可以
相关文章推荐
- C++变量的引用
- c++中临时变量不能作为非const的引用参数
- C++学习笔记,引用变量
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- 简单介绍C++中变量的引用
- C++随记(七)--引用变量
- 【C++】引用变量
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++参数传递(引用,临时变量)
- c++中临时变量不能作为非const的引用参数的方法
- C++在两个类的头文件中相互定义变量,出现超前引用的情况的解决办法
- c++之引用变量
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++ 类中特殊成员变量(常量、静态、引用)的初始化方法
- [转]c++中临时变量不能作为非const的引用参数
- [C++]变量存储类别,指针和引用,类与对象,继承与派生的一些摘要
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- C++中函数用普通变量,指针,引用做形参的区别
- C++ 类中特殊的成员变量(常变量、引用、静态)的初始化方法
- c++中函数中变量内存分配以及返回指针、引用类型的思考