C++中引用能够将很多问题在同级上解决,不会开辟新的空间。
在C中是没有引用这个定义的,这也是C++中的一个特色。
通过一个swap函数来简单的了解引用。
/**************************
* 通过引用交换两个数的值
*(类型)&(变量名)=(所引用的变量)
*
* 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
* 引用的声明方法:类型标识符 &引用名=目标变量名;
* 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
* 说明:
* (1)&在此不是求地址运算,而是起标识作用。
* (2)类型标识符是指目标变量的类型。
* (3)声明引用时,必须同时对其进行初始化。
* (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,
* 且不能再把该引用名作为其他变量名的别名。
* ra=1; 等价于 a=1;
* (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的
* 一个别名,它本身不是一种数据类型,因此
* 引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是
* 对目标变量求地址。&ra与&a相等。
* (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法
* 建立一个数组的别名。
**************************/
#include <iostream>
using namespace std;
void swap(int &ra,int &rb)
{
ra^=rb;
rb^=ra;
ra^=rb;
}
//void swap(int *pa,int *pb)
//{
// *pa^=*pb;
// *pb^=*pa;
// *pa^=*pb;
//}
void swap(char* &p, char* &q)
{
char *t = p;
p = q;
q = t;
}
int main()
{
int a=2,b=5;
int &aa=a;//这里的aa即为a的引用
int &bb=b;
cout<<" aa = "<<aa<<" bb = "<<bb<<endl;
swap(a,b);
cout <<" a = " << a << " b = " << b << endl;
char *p = "china";
char *q = "america";
cout <<" p = "<<p<<" q = "<<q<<endl;
swap(p,q);
cout <<" p = "<<p<<" q = "<<q<<endl;
return 0;
}
对于引用的传值
/*
* 对于引用的表达式传递必须加const
* 引用的值改编会使被引用值也发生改编
*
*
*/
#include <iostream>
using namespace std;
void func1(int ref)
{
cout<<ref<<endl;
}
void func2(int &ref)//对于引用的表达式传递必须加const,如func3
{
cout<<ref<<endl;
}
void func3(const int &ref)
{
cout<<ref<<endl;
}
int main()
{
int a=200;
int b=100;
int &aa=a;
aa=4; //引用的值改编会使被引用值也发生改编
cout<<a<<endl;//这里会得到4
func1(a+b);
// func2(a+b);//错误!
func3(a+b);
return 0;
}