C++笔记(13)数组的引用和引用的数组

C++笔记(13)数组的引用和引用的数组

数组的引用

数组有二个特性,影响作用在数组上的函数:一是不能复制数组,二是使用数组名时, 数组名会自动指向其第一个元素的指针。

因为不能复制,所以无法编写使用数组类型的形参,数组会自动转化为指针。比如:

void print(int arr[4]) {

cout << sizeof(arr) << endl;

}

调用函数时,始终输出8。

//上面的函数等同于

void print(int arr[]) {...}

//也等同于

void print(int* arr) {...}

//甚至等同于

void print(int arr[999]) {...}

而 x86 下 sizeof(int) ==4 , sizeof(int *)==4;x64 下 sizeof(int) ==4 , sizeof(int *)==8,因此输出为8.

要解决这样的问题,可以使用数组的引用。将数组形参声明为数组的引用,如果形参是数组的引用,编译器会传递数组的引用本身。

void print(int (& arr)[3]) {

cout << sizeof(arr) << endl;

}

此时输出为12。函数只能接受大小为3的int[]。用模板加数组的引用可以解决这个问题:

template

void print(T(&arr)[N])

{

cout << sizeof(arr) << endl;

}

使用模板后可以使同一函数处理不同的数组了,扩大了函数的适用范围。但是这样定义的函数仍然存在这下述缺点:

1. 模板最终是要实例化的,所以调用多少个不同长度的数组,就要产生这个函数的多少份实例代码。而传统方式的函数只有一份实例,与函数的调用次数无关。

2. 不能应用于在编译期间数组的大小尚未确定的情况,这也使这个模板函数的适用范围受到限制。

3. 这样写的函数显然不能用指针变量作为函数的的参数,因此不能用这个函数处理动态分配的内存区域。

引用的数组

这是一个错误的定义

示例1:

示例2:

int arr[] = { 1, 4, 5};

int& a[3] = arr; //错误

int(&a)[3] = arr;//正确

这篇及以后的博客来自我的新电脑,嘿嘿!

相关推荐

脚本用什么编程软件好一些
beta365官网app下载

脚本用什么编程软件好一些

📅 10-08 👁️ 2457
绘制直线和圆弧多段线的步骤
约彩365彩票官方app下载安卓

绘制直线和圆弧多段线的步骤

📅 12-30 👁️ 9229
日本的吸烟礼仪!旅行中在哪里吸烟?
beta365官网app下载

日本的吸烟礼仪!旅行中在哪里吸烟?

📅 07-22 👁️ 9632
戊戌变法多少天(戊戌变法一共103天)
beta365官网app下载

戊戌变法多少天(戊戌变法一共103天)

📅 08-05 👁️ 4234