C ++提供了一个数据结构array(数组),该数组存储一个固定大小的顺序相同类型元素的集合。它们用于存储相似类型的元素。(所有元素的数据类型必须相同。)它们可用于存储原始数据类型的集合,例如任何特定类型的int,float,double,char等。作为补充,C或C ++中的数组可以存储派生的数据类型,例如结构,指针等。
所有阵列均包含连续的内存位置。最低地址对应于第一个元素,最高地址对应于最后一个元素。
数组声明
要使用C ++声明数组,程序员可以指定元素的类型和数组中的元素数量,例如:
![a11d8a5fc55d4ca1bc25088bdc2da68f.png](https://i-blog.csdnimg.cn/blog_migrate/c462ad4e2e4e6002a5544f277998040a.png)
这称为一维数组。arraySize必须是一个大于零的整数常量,并且type可以是任何有效的C ++数据类型。例如,要声明类型为double的5元素数组,请使用以下语句:
![c0b9b3048308ac993681187c1d0a5ad1.png](https://i-blog.csdnimg.cn/blog_migrate/9031964cc0811eac52a63d3233c4d51b.png)
我们可以通过多种方式声明数组。可以通过初始化或同时指定两者的类型和大小来实现。
1. 通过指定大小声明数组
![bec88e09559920a1588af996c6d5f46a.png](https://i-blog.csdnimg.cn/blog_migrate/4b6dd1a4ba77905dde62747aed94c243.png)
2. 通过初始化元素进行数组声明
![9a7a9806fb2aff27155473baedc963ab.png](https://i-blog.csdnimg.cn/blog_migrate/af777386f1a9f2d925ddf50f6074aa22.png)
3. 通过指定大小和初始化元素进行数组声明
![360094bb797ea0dd1dd05fb4cfc35bf2.png](https://i-blog.csdnimg.cn/blog_migrate/4c8d7f5c752c856f2675107009901736.png)
C / C ++中的数组的优点:
1. 使用数组索引随机访问元素。
2. 使用更少的代码,因为它创建了包含多个元素的单个数组。
3. 轻松访问所有元素。
4. 使用单个循环,遍历数组变得很容易。
5. 排序变得容易,因为可以通过编写更少的代码来完成排序。
C / C ++中数组的缺点:
1. 允许输入固定数量的元素,这在声明时决定。与链接列表不同,C语言中的数组不是动态的。
2. 元素的插入和删除可能会很昂贵,因为需要根据新的内存分配来管理元素。
数组示例:
![88fb6790df548cd81104df83f9f552ec.png](https://i-blog.csdnimg.cn/blog_migrate/215bfef75240a0b6fdb390f1a6fc5bf9.png)
输出:
![6b0c5e09f3689cecd108a5b282842cc6.png](https://i-blog.csdnimg.cn/blog_migrate/7959c4b02ee86b3c23e44f394f3cad57.png)
元素示例存储在连续的内存位置
![4be57d7679fca4c053b7038eb7756b71.png](https://i-blog.csdnimg.cn/blog_migrate/5ceaee74d43d7560153a1d139c658b1a.png)
输出:
![fd5c5bc0c9fcac27ded033c100476d41.png](https://i-blog.csdnimg.cn/blog_migrate/a6b769af9948d6b225643f89466db18d.png)
多维数组
C ++允许多维数组。这是多维数组声明的一般形式-
![b129a2d2364d9677da9878b828ff63a0.png](https://i-blog.csdnimg.cn/blog_migrate/da354170e4806ee1ce7bdde356830ca6.png)
例如,以下声明创建了三维5。10。4个整数数组-
![9103e670cc6a66c15381299b497764ac.png](https://i-blog.csdnimg.cn/blog_migrate/9d54f7b29f4247475a8b22aee59ad43a.png)
二维阵列
多维数组的最简单形式是二维数组。本质上,二维数组是一维数组的列表。要声明大小为x,y的二维整数数组,应编写如下内容:
![359a30d8d15d221971b23278e7202bb4.png](https://i-blog.csdnimg.cn/blog_migrate/a836ce29f61cf68412a3581baff3ae99.png)
Type可以是任何有效的C ++数据类型,并且arrayName将是有效的C ++标识符。
可以将二维数组视为一个表,该表将具有x的行数和y的列数。包含三行四列的二维数组a可以显示如下:
![e74efbc06d34d286f31826d3210215a5.png](https://i-blog.csdnimg.cn/blog_migrate/64c15fe43a7239e018bfc56fe72d05a7.png)
数组a中的每个元素都由形式为a [i] [j]的元素名称标识,其中a是数组的名称,而i和j是唯一标识a中每个元素的下标。
初始化二维数组
多维数组可以通过为每行指定带括号的值来初始化。以下是具有3行的数组,其中每行有4列。
![c1c7e215269e04b70d8ee56d24f15010.png](https://i-blog.csdnimg.cn/blog_migrate/0dfbacedfe1845eaf4e5bcdbada2bd5c.png)
指示所需行的嵌套括号是可选的。以下初始化等效于先前的示例-
![762e4e3803724f3af59d229d12e0fa65.png](https://i-blog.csdnimg.cn/blog_migrate/eb952d31f6ab07f57c81c5d98fa1c738.png)
访问二维数组元素
使用下标(即数组的行索引和列索引)访问二维数组中的元素。例如:
![89899ac1b37f24a1879741e5ec58ae36.png](https://i-blog.csdnimg.cn/blog_migrate/0082e4c351f6bfedac0d0f146f023917.png)
上面的语句将从数组的第三行获取第4个元素。您可以在上图中验证这一点。
![aff545c8199fc907fbc26ce235ee8470.png](https://i-blog.csdnimg.cn/blog_migrate/f888d59f89ec94e1ab7080ac24ae33fe.png)
输出:
![2bf189a9fd4ecc8e5a72aee2d647ffb5.png](https://i-blog.csdnimg.cn/blog_migrate/85cba52be5b16ffedc1a513722ad4bc4.png)
如上所述,您可以具有任意数量的维度数组,尽管您创建的大多数数组很可能是一维或二维的。
指向数组的指针
除非您对指针有相当的了解,否则您很可能不会理解本章。
因此,假设您对C ++中的指针有一点了解,那么让我们开始:数组名称是指向数组第一个元素的常量指针。因此,在声明中:
![9c08ab36208ba9c47401c5d81261fbd1.png](https://i-blog.csdnimg.cn/blog_migrate/2cf43235503c78db60170dbdbcac9aa1.png)
balance是指向的指针&balance[0],它是数组balance的第一个元素的地址。因此,以下程序片段将分配p第一个元素的地址balance:
![8b412f7229500fae9016c64ab12923a3.png](https://i-blog.csdnimg.cn/blog_migrate/f0fee374a22f5a8013b305023a28f16d.png)
将数组名称用作常量指针是合法的,反之亦然。因此,这*(balance + 4)是访问处数据的合法方法balance[4]。
一旦储存在第一个元素的地址p,则可以使用数组元素访问*p, *(p+1),*(p+2),等。下面是显示上述所有概念的示例:
![355aab6ee3af11090734c9d9aef6fea6.png](https://i-blog.csdnimg.cn/blog_migrate/36466f4b0a6a0a58b016f220971a8b39.png)
输出:
![13e466e9ae4adf74223b3b75b286d2e9.png](https://i-blog.csdnimg.cn/blog_migrate/2b0fb8c2ca9d4802529be157fe62ba5a.png)
在上面的示例中,p是指向的指针double,这意味着它可以存储double型变量的地址。一旦我们在p中有地址,那么* p将为我们提供在p中存储的地址处可用的值,如上例所示。