数组是由一批相同类型的元素(element)的集合所组成的数据结构,分配一块连续的内存来存储。
语法:
<数据类型> <数组名>[<数组长度>];
数据类型:数组内存放的数据类型,如int、char,表示整型或字符型数组
数组名:和变量一样,提供一个标识符名称,遵循变量命名规范
数组长度:数组内元素数量(数组内存放的数据,每一个称之为一个元素)
int v[5]; 定义了一个有5个整型元素的数组
char v[5]; 定义了一个有5个char元素的数组
double v[5]; 定义了一个有5个double元素的数组
string v[5]; 定义了一个有5个字符串元素的数组
bool v[5]; 定义了一个有5个布尔型元素的数组
数组的赋值:
int v[2];
v[0]=11;
v[1]=22;
int v[2]={1,2};
数组内包含多个元素,每个元素都有一个下标索引。下标索引从0开始,即下标0表示数组第一个元素。可以通过下标索引,访问数组内的各个元素。
数组内元素都是相同类型的,不同类型不可混搭。
数组的特点
特点1 任意类型均可构建数组
基本数据类型:int、float、double、char、string、bool等
复合数据类型:结构体、联合体等
指针类型:int*、char*、float*等
枚举类型:enum
float v1[] = {1.1, 2.2, 3.3, 4.4, 5.5};
double v2[] = {1.1, 2.2, 3.3, 4.4, 5.5};
char v3[] = {'a', 'b', 1, 2, 3};
string v4[] = {"林志铃", "蔡依临", "刘亦飞"};
bool v5[] = {0, 1, true, false};
// 枚举类型
enum Color { RED, GREEN, BLUE };
Color colors[] = {RED, GREEN, BLUE, GREEN, BLUE};
特点2 固定大小(无边界检查)
C++数组,一旦定义完成,其大小(长度)即固定。
C++不会做数组边界检查,即下标索引超出数组范围,编译过程中不会报错。
如果超出边界,程序不回报错,可能会修改到别的程序去,会导致程序崩溃!!!
特点3 内存连续且有序
数组内存空间是连续分配的,并且每个元素分配大小取决于存放类型
无论何时访问数组元素,均一致(手动修改值除外),如v[0],取出的都是数值1
也是基于此确保数组元素类型一致,比如int数组每个元素4字节的空间,无法存储double数值
通过 sizeof(数组)/sizeof(数组某元素) 可以得到数组元素个数
特点4 元素值可以修改
通过下标锁定元素,对存储值进行修改
特点5 数组变量不记录数据
数组变量v本身: 并非记录了数组内全部元素(即:不存数据)
而是记录了v[0]元素的内存地址
数组元素访问规律如下: 通过数组变量(如v)记录下标0元素内存位置,即可找到v[0]
通过v[0]地址 + 单个元素空间大小(如int数组,4字节),
即可找到v[1] 通过v[1]地址 + 4字节,即可找到v[2]
…… 以此类推
字符数组
char s[] = "hello";
char s[] = {'h', 'e', 'l', 'l', 'o', '\0'};
在字符数组中,额外在最后添加一个元素\0(空字符),作为结束标记
这种规律不适用中文(ASCII无法表示),中文请使用string类型不要使用char数组
多维数组
多维数组:对数组进行嵌套,即数组内的每个元素依旧是数组。
根据嵌套的层次可以有:二维数组、三维数组、四维数组、…等更多维度的数组。
多维数组实际应用很广泛,特别是二维、三维数组。