1 引用的基本用法
作用:为变量或数组起别名。
1.1 变量的引用
语法:数据类型 &别名 = 原名;
示例:
int main() {
int a = 5;
int &b = a; //引用:为变量起别名
cout << "a = " << a << endl; //5
cout << "b = " << b << endl; //5
b = 10;
cout << "a = " << a << endl; //10
cout << "b = " << b << endl; //10
return 0;
}
1.2 数组的引用
(1)直接定义数组引用
语法:数据类型 (&别名)[数组长度] = 原数组名;
int arr[5] = {
1,2,3,4,5};
//直接定义数组引用
int (&array)[5] = arr;
//直接定义数组指针
int (*arrPtr)[5] = &arr;
注1:数组引用 vs 数组指针:
数组引用定义:数据类型 (&别名)[数组长度] = 原数组名;
,如:int (&array)[5] = arr;
数组引用访问元素:别名[索引]
,如array[i]
数组指针定义:数据类型 (*数组指针名)[数组长度] = &数组名;
,如:int (*arrPtr)[5] = &arr;
数组指针访问元素:(*数组指针名)[索引]
,如(*arrPtr)[i]
或·*((*arrPtr) + i)
【区别】数组引用(赋值符左边是&
,右边是数组名
);数组指针(赋值符左边是*
,右边是数组地址
)
注2:数组指针 vs 指针数组:
数组指针(array pointer):指向数组的指针,用于存储数组的地址。数组指针:使用小括号,如
int (*p)[5] = &arr;
指向长度为5且元素类型为int
类型的一维数组,即指向一个int[5],存储数组地址;
占用内存大小为4字节。
指针数组(pointer array):元素为指针类型的数组,用于存储指针类型的元素。
指针数组:未使用小括号,如
int *p[5] = &arr;
长度为5且元素类型为int *
(指针类型)的一维数组,每个int *
(指针类型)元素存放其对应常量的首地址;
占用内存大小为20字节(int *
指针类型占4字节,共5个元素)。
示例1:直接定义数组引用
#include <iostream>
using namespace std;
int main() {
int arr[5] = {
1,2,3,4,5 };
/* 1.直接定义数组引用 */
int (&array)[5] = arr;
//使用数组别名遍历数组
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) {
cout << array[i] << endl;
}
/* 定义数组指针 */
int (*arrPtr)[5] = &arr; //&arr:整个数组的地址
//arr等价于&arr[0],类型为int *类型:数组首元素地址
//int (*arrPtr)[5] = arr; //报错:int *类型的值不能用于初始化int (*)[5]类型的实体
//使用数组指针遍历数组
for (int i = 0; i < sizeof