C++引用

目录

什么是引用

注意: 

 不允许用引用的情况:

引用作为函数参数

使用引用返回函数值


什么是引用

我们直接举个例子:

int i = 5;
int& j = i;//声明j是一个整型变量的引用,用整型变量i对它进行初始化

此时j就可以看成是变i的引用,理解为i的别名。经过声明,i与j有相同的作用,相同的数值。


注意: 

1.&就不代表地址,而是引用声名符。

2.对变量声明一个引用,并不另外开辟内存单元,即此时i与j占用内存的同一位置。

3.声明引用时,必须立即对它进行初始化。否则出现如下错误。

 4.为引用提供的初始化,可以是一个变量或另一个引用:

int i=5;
int& j=i;
int& k = j;

5.指针是通过地址间接访问某个变量,而引用是通过别名直接访问某个变量。因此引用不用写“*”,更加简便。(指针甚至同时需要写&取址符。)

6.一旦引用后,就不能修改引用的值。

int i, k;
int& j = i;
j = &k;//错误,企图重新声明j是整型变量k的引用

 7.可以将引用的地址赋给一个指针,此时指针指向的是原来的变量:

int num = 50;
int& ref = num;
int* p = &ref;//p保存的是变量num的地址

 不允许用引用的情况:

1.不允许建立void类型的引用,因为void相当于无类型。(下面举例代码就是错误的例子)

void& r = 10;

2.不能建立引用的数组。

int a[4] = "qwer";
int& ca[4] = a;

3.不能进行引用的引用(引用不是一种数据类型),也没有引用的指针。

int n = 1;
int&& r = n;//错误,不能建立引用的引用
int&* p = n;//错误,不能建立指向引用的指针,

引用作为函数参数

使用指针变量作为函数参数设计两个数字交换的函数是可以交换数值成功的。

#include<iostream>
using namespace std;
void swap(int* m, int* n)
{
	int temp;
	temp = *m;
	*m = *n;
	*n = temp;
}
int main()
{
	int a = 5, b = 10;
	cout << "a=" << a << " b=" << b << endl;
	swap(&a, &b);
	cout << "a=" << a << " b=" << b << endl;
	return 0;
}

结果交换成功:

使用引用也可以成功交换:

#include<iostream>
using namespace std;
void swap(int& m, int& n)
{
	int temp;
	temp = m;
	m = n;
	n = temp;
}
int main()
{
	int a = 5, b = 10;
	cout << "a=" << a << " b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << " b=" << b << endl;
	return 0;
}

 结果:

 其中m,n分别是a和b的别名,对m,n的访问就是对a和b的访问,而不使用指针或引用是无法达到这种效果的。

#include<iostream>
using namespace std;
void swap(int m, int n)
{
	int temp;
	temp = m;
	m = n;
	n = temp;
}
int main()
{
	int a = 5, b = 10;
	cout << "a=" << a << " b=" << b << endl;
	swap(a, b);
	cout << "a=" << a << " b=" << b << endl;
	return 0;
}

 结果:

 因为只是将main函数中的值传到了swap函数,swap函数调用后恢复原样,没有直接对main函数中的数值做出数值或地址上的影响。


使用引用返回函数值

#include<iostream>
using namespace std;
int a[] = { 1,3,5,7,9 };
int &index(int i)
{
	return a[i];
}
int main()
{
	index(2) = 25;
	cout << index(2);
	return 0;
}

输出:

 但若将函数的引用符号删去:

#include<iostream>
using namespace std;
int a[] = { 1,3,5,7,9 };
int index(int i)//删除此处引用
{
	return a[i];
}
int main()
{
	index(2) = 25;
	cout << index(2);
	return 0;
}

 结果:

 这是因为不添加引用的话,函数值只能传出不能传入,只传出的话相当于只是一个固定数值,不能够进行修改。(仅为个人理解)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值