目录
- 目录
- 前言
- 引用的概念
- 交换a和b的值:
- 引用作为函数的返回值
- 常引用
- 例子
前言
纯自学,看的mooc上郭老师的课,整理整理。。。不然全忘了。。
引用的概念
类型名&引用名=某变量名;
int&r=n;
r引用了n,r的类型是int&,r是引用变量。
某个变量的引用等价于这个变量,r和n是一回事。
注意:
定义引用时一定将其 初始化成引用某个变量;
初始化后,他就一直引用该变量,不会再引用别的变量;
引用只能引用变量,不能引用常量和表达式;
double a=4,b=5;
double &r1=a;
double &r2=r1;
r2=10;
cout<<a<<endl;//输出10
r1=b; ///r1没有引用b,而是从一而终的引用a,这里只不过是对r1赋值; cout<<a<<endl; ///5
交换a和b的值:
指针间接取值
void swap(int*a,int*b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}
int n1,n2;
swap(&n1,& n2);///传变量地址调用
传引用调用
int &swap(int &x,int &y)
{
int t=a;
int a=b;
int b=t;
}
swap(m,n);///m,n等价于x,y,于是x,y交换,就m,n交换;
引用作为函数的返回值
int n=4;
int &setvalue(){return n;}//函数返回值是引用,这个引用引用了全局变量n;
int main()
{setvalue()=40;//等价于对n赋值cout<<n;return 0;
}///输出40
常引用
不能通过常引用修改其引用的内容;
int n=10;
const int&r=n;
r=200;//错
n=300;//可以,引用的内容可以被修改,只不过不能通过常引用修改。。
例子
#include <iostream>
using namespace std;
class A
{
public:int x;int getX() { return x; }
};
void swap(A&a,A&b) ///自定义了一个类型A,a是A的对象。。。
{int tmp = a.x;a.x = b.x;b.x = tmp;
}
int main()
{A a,b;a.x = 3;b.x = 5;swap(a,b);cout << a.getX() << "," << b.getX();return 0;
}
交换指针,有时在数组里用到。。。
不过可以用strcpy,挺麻烦。。
#include <iostream>
using namespace std;void swap(int*&a,int*&b)///交换两个指针指向的地址,引用的是个指针。。。
{int * tmp = a;a = b;b = tmp;
}
int main()
{int a = 3,b = 5;int * pa = & a;int * pb = & b;swap(pa,pb);cout << *pa << "," << * pb;return 0;
}
返回值是引用,引用了a[i],于是返回值是它。。
然后对它赋值
#include <iostream>
using namespace std;
int& getElement(int * a, int i)
{return a[i];
}
int main()
{int a[] = {1,2,3};getElement(a,1) = 10;cout << a[1] ;return 0;
}