C++学习笔记----引用

C++学习笔记

----引用

一.引用的概念
  1. 概念
    引用不是变量,不分配内存,引用是为已经定义好的其他变量引入新的标识符。
  2. 定义
    数据类型 &引用标识符 = 变量标识符;
int a = 10;
int &r = a;
  1. 其他

引用定义时必须初始化,且初始化时,类型必须相同。
对引用的读写也是对引用所引用的变量进行读写。
初始化后,引用不得再引用其他变量作为其他变量的别名。

二.引用作为函数的形参
  1. 引用的主要作用是作为函数的形参。
    (1)从函数返回多个值
    (2)在函数内通过直接访问引用形参可以获取和修改实参变量的值,实现在一个函数访问和修改另外一个函数变量的值。
    (3)可用const修饰引用形参,使其为常量引用表示其引用的实参在函数内为常量,不能被改变。
    (4)可以实现指针形参的功能,且可以直接访问方式访问实参。但传递数组时,只能用指针形参,引用形参不可用。
  2. 代码实现
#include <iostream>
using namespace std;
void swap(int &p1, int &p2)
{
	int temp;
	temp = p1;
	p1 = p2;
	p2 = temp;
}
int main()
{
	int a = 11, b = 12;
	swap(a, b);
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
} 
  1. 运行结果
    在这里插入图片描述
三.返回引用的函数
  1. 函数的返回类型可以是某个数据类型的引用:
数据类型 &函数名(参数表)
{
    ...
}
  1. 若函数的类型为引用,则函数不能返回局部变量和非引用类型形参变量,但可以返回静态局部变量的引用、引用形参以及动态分配的堆内存地址的引用。
  2. 返回引用的函数其返回值可以初始化和赋值给一个同类型的引用,也可以给一个同类型的变量赋值,还可以作为左值。
    类型 变量标识符 = 返回引用的函数(参数表);
    类型 &引用标识符 = 返回引用的函数(参数表);
    变量标识符 = 返回引用的函数(参数表);
    引用标识符 = 返回引用的函数(参数表);
    返回引用的函数(参数表) = 常量或变量;
  3. 函数调用作为左值
#include <iostream>
using namespace std;
int &calculate(int n, int &a, int &b)
{
	if(n >= 10)
	{
		a = n/2;
		return a;
	}
	else
	{
		b = n*2;
		return b;
	}
}
int main()
{
	int a = 0, b = 0;
	int num[2] = {2, 10};
	for(int i = 0; i < 2; i++) 
		calculate(num[i], a, b)++;
	cout << "a = " << a << endl;
	cout << "b = " << b << endl;
	return 0;
} 

在这里插入图片描述

四.指针变量的引用
  1. 将指针变量引用作为函数形参可以从函数中传指针变量的地址值。
  2. 定义:
    数据类型 *&指针引用标识符 = 指针变量;
  3. 代码实现
#include <iostream>
using namespace std;
int main()
{
	int a = 7;
	int *p = &a;
	int *&p1 = p;
	cout << "a = " << a << endl;
	cout << "*p = " << *p << endl;
	cout << "*p1 = " << *p1 << endl;
	cout << "p = " << p << endl;
	cout << "p1 = " << p1 << endl;
	cout << "&p = " << &p << endl;
	cout << "&p1 = " << &p1 << endl;
	return 0;
} 
  1. 运行结果
五.数组的引用
  1. 数组的引用意义不是很大,因为其所引用的数组类型和大小均不能改变。
  2. 定义
    数组数据类型 (&数组引用标识符)[数组大小] = 同类型同大小的数组名;
  3. 代码实现
#include <iostream>
using namespace std;
int main()
{
	int num[3] = {1,2,3};
	int (&n)[3] = num;
	n[0] = 4;
	n[1] = 5;
	n[2] = 6;
	for(int i = 0; i < 3; i++)
		cout << "num[" << i << "] = " << num[i] << "   ";
	cout << endl;
	for(int i = 0; i < 3; i++)
		cout << "n[" << i << "] = " << n[i] << "   ";
	return 0;
} 
  1. 运行结果
    在这里插入图片描述
六.函数的引用
  1. 可以用函数引用名词调用函数。
  2. 定义
    函数返回数据类型 (&函数引用标识符)(参数表) = 函数名;
  3. 代码实现
#include <iostream>
using namespace std;
int change(int &a)
{
	a = 7;
	return a;
}
int main()
{
	int a = 3;
	int (&Change)(int &a) = change;
	Change(a);
	cout << "a = " << a << endl;
	return 0;
} 
  1. 运行结果
    在这里插入图片描述
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

X to Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值