C++学习笔记
----引用
一.引用的概念
- 概念
引用不是变量,不分配内存,引用是为已经定义好的其他变量引入新的标识符。 - 定义
数据类型 &引用标识符 = 变量标识符;
int a = 10;
int &r = a;
- 其他
引用定义时必须初始化,且初始化时,类型必须相同。
对引用的读写也是对引用所引用的变量进行读写。
初始化后,引用不得再引用其他变量作为其他变量的别名。
二.引用作为函数的形参
- 引用的主要作用是作为函数的形参。
(1)从函数返回多个值
(2)在函数内通过直接访问引用形参可以获取和修改实参变量的值,实现在一个函数访问和修改另外一个函数变量的值。
(3)可用const修饰引用形参,使其为常量引用表示其引用的实参在函数内为常量,不能被改变。
(4)可以实现指针形参的功能,且可以直接访问方式访问实参。但传递数组时,只能用指针形参,引用形参不可用。 - 代码实现
#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;
}
- 运行结果
三.返回引用的函数
- 函数的返回类型可以是某个数据类型的引用:
数据类型 &函数名(参数表)
{
...
}
- 若函数的类型为引用,则函数不能返回局部变量和非引用类型形参变量,但可以返回静态局部变量的引用、引用形参以及动态分配的堆内存地址的引用。
- 返回引用的函数其返回值可以初始化和赋值给一个同类型的引用,也可以给一个同类型的变量赋值,还可以作为左值。
类型 变量标识符 = 返回引用的函数(参数表);
类型 &引用标识符 = 返回引用的函数(参数表);
变量标识符 = 返回引用的函数(参数表);
引用标识符 = 返回引用的函数(参数表);
返回引用的函数(参数表) = 常量或变量;
- 函数调用作为左值
#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;
}
四.指针变量的引用
- 将指针变量引用作为函数形参可以从函数中传指针变量的地址值。
- 定义:
数据类型 *&指针引用标识符 = 指针变量;
- 代码实现
#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;
}
- 运行结果
五.数组的引用
- 数组的引用意义不是很大,因为其所引用的数组类型和大小均不能改变。
- 定义
数组数据类型 (&数组引用标识符)[数组大小] = 同类型同大小的数组名;
- 代码实现
#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;
}
- 运行结果
六.函数的引用
- 可以用函数引用名词调用函数。
- 定义
函数返回数据类型 (&函数引用标识符)(参数表) = 函数名;
- 代码实现
#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;
}
- 运行结果