概述
数组是相同数据类型对象的集合。是一种复合类型,数组在定义时其大小就固定了,并且不能修改,不能向数组中添加或删除元素。
数组在内存中是连续存储的,即使是多维数组也是在内存中连续存储的,在理解上数组是多维的。在很多情况下,数组名可以转化为数组首地址,即数组第一个元素的内存地址。
由于引用不是对象,所以不存在引用的数组,指针是对象,可以存放在数组中。
定义
定义数组必须指定类型,不能用auto来推断类型。
int arr1[3] = {1,2,3};
int arr2[3] = {1}; //等价于 int arr2[3] = {1,0,0}
int arr3[] = {1,2,3}; //等价于 int arr2[3] = {1,2,3};
一般使用sizeof运算符来求数组的长度。
int arr[] = {1,2,3,4,5};
int arrLen = sizeof(arr) / sizeof(*arr);//sizeof 不会将arr转化为指针来处理
使用for循环来读取数组中的元素:
int arr[] = {1,2,3,4,5};
int arrLen = sizeof(arr) / sizeof(*arr);
for(int i = 0 ; i < arrLen;i++){
arr[i] = 0;
}
注意:不能拷贝和赋值
int arr[] = {1,2,3};
int arr1[] = arr; //错误的,不能使用一个数组,初始化另一个数组
arr1 = arr; //错误的,不能把一个数组直接赋值给另一个数组
复杂数组的声明
由于引用不是对象,所以没有引用的数组
int *arr1[2]; //正确,arr1是int *数组
int &arr2[2]; //错误,不存在引用的数组
int (*pArr)[2] = &arr; //pArr是一个指向int[]的指针
int (&pRef)[2] = arr; //pRef是一个引用int[]的引用
题外话:今天遇到一个奇怪的问题,数组下标越界在windows,苹果上都没有报错,只在安卓上闪退,导致我们主城检查了半个小时,惭愧惭愧。千万不要下标越界,切记切记。。。