C++变量的引用

引用的概念

变量的引用就是变量的别名,&是“引用声明符”,假如有一个变量a,想给它起一个别名b,则:

int a;
int &b=a;

对变量声明一个引用,并不另开辟存储单元,b和a都代表同一变量单元。
在声明一个引用的同时,必须同时使之初始化,即声明它代表哪一个变量。
在声明一个变量的引用之后,在本函数执行期间,该引用一直与代表的变量相联系,不能再作为其他变量的别名

引用的简单实用

<例1>了解引用和变量的关系

#include
#include
using namespace std;

int main()
{
	int a = 10;
	int& b = a;
	a = a * a;
	cout <

C++变量的引用_第1张图片
可以看出因为引用并未开辟存储空间,所以引用的值与变量的值始终相等。

关于引用的简单说明

  1. 引用并不是一种独立的数据类型,它必须与某一种类型的数据相联系,声明引用时,必须指定它代表的是哪个变量,即对它初始化。
  2. 引用与其代表的变量共享同一内存单元,系统并不为引用另外分配存储空间。实际上,编译系统使引用和其代表的变量具有相同的地址。
  3. 当&a的前面有类型符时(如int &a),它必然是对引用的声明,如果前面没有类型符(如p=&a),此时的&是取地址运算符。
  4. 对引用的初始化可以用一个变量名,也可以用另一个引用。
  5. 引用在初始化后不能再被重新声明为另一个变量的别名。
  6. 实际上C++中很少使用独立变量的引用,如果要是用某一个变量,直接使用它的原名。

将引用作为函数参数

C++之所以增加”引用“,主要是利用他作为函数参数,以扩充函数传递数据的功能。

C++调用函数时,有两种传递书的方式,一种是常用的方法:将实参的值传递给形参,称为传值方式调用;另一种是将实参的地址传递给引用型形参,称为引用方式调用

<例1>无法实现两个变量的值互换的程序

#include 
#include
using namespace std;

void swap(int a,int b)
{
   int temp;
   temp = a;
   a = b;
   b = temp;
}

int main()
{
   int i = 3, j = 5;
   swap(i, j);
   cout << setw(5) << i << setw(5) << j << endl;
   return 0;
}

<例2>使用指针变量作形参,实现两个变量的值互换

#include 
#include
using namespace std;

void swap(int *a,int *b)
{
   int temp;
   temp = *a;
   *a = *b;
   *b = temp;
}

int main()
{
   int i = 3, j = 5;
   swap(&i, &j);
   cout << setw(5) << i << setw(5) << j << endl;
   return 0;
}

<例3>利用“引用形参”实现两个变量的值互换

#include 
#include
using namespace std;

void swap(int &a,int &b)
{
   int temp;
   temp = a;
   a = b;
   b = temp;
}

int main()
{
   int i = 3, j = 5;
   swap(i, j);
   cout << setw(5) << i << setw(5) << j << endl;
   return 0;
}

对引用的进一步说明

  1. 不能建立void型的引用
void &a=9;
  1. 不能建立引用的数组
char c[6]="hello";
char &rc[6]=c;

数组名c只代表数组首元素的地址,本身并不是一个占有存储空间的变量。

  1. 可以将变量的引用的地址赋给一个指针,此时指针指向的是原来的变量。
int a=3;
int &b=a;
int *p=&b;

相当于

int *p=&a;

但是不能定义指向引用类型的指针变量

int *p=& b;
  1. 可以建立指针变量的引用
int i=5;
int *p=&i;
int * &pt=p;
  1. 可以用const对引用加以限制,不允许改变该引用的值
int i=5;
const int * &a=i;
a=3;   //企图改变引用的值,错误

//但是const并不阻止改变引用所代表的的变量的值
i=3;  //合法

这一特征在使用引用作为函数形参时是有用的,因为有时希望保护形参的值不被改变。

  1. 可以用常量或者表达式对引用进行初始化,但此时必须用const进行声明
int i=5;
const &a=i+3;

用这种方法不仅可以用表达式对引用进行初始化,还可以用不同类型的变量对之初始化(要求能赋值兼容的类型

double i=3.1415;
const int &a=d;  //此时输出a的值将是3而不是3.1415

如果在上面声明引用时不用const,则会发生错误。

你可能感兴趣的:(C++基础,C++变量的引用)