C++变量的引用

引用的概念

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

int a;
int &b=a;

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

引用的简单实用

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

#include<iostream>
#include<iomanip>
using namespace std;

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

	b = b / 5;
	cout <<setw(5)<< b <<setw(5)<< a;
	return 0;
}

运行结果
可以看出因为引用并未开辟存储空间,所以引用的值与变量的值始终相等。

关于引用的简单说明

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

将引用作为函数参数

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

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

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

#include <iostream>
#include<iomanip>
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 <iostream>
#include<iomanip>
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 <iostream>
#include<iomanip>
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,则会发生错误。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值