这种数据结构,每一个编程语言都有
定义与初始化
unsigned cnt = 42;
constexpr unsigned sz = 42;
int arr[10]; 正确
int arr1[cnt]; 错误,cnt不是常量表达式
int arr2[sz]; 正确,sz是常量表达式
- 数组的维度在编译时应该是已知的,所以使用常量表达式或字面值
- 数组的默认初始化,会令数组含有未定义的值
- 定义数组的时候必须指定数组的类型,不允许用auto关键字,且数组的元素应为对象,不存在引用的数组
int arr1[3] = {0,1,2}; arr1={0,1,2}
int arr2[5] = {0,1,2}; arr2={0,1,2,0,0}
int arr3[] = arr2 错误,不允许拷贝赋值
- 对于复杂数组,一般可以根据运算符的优先级判断数组类型,或者可以从数组的名字开始由内向外的顺序阅读
int *(&arr)[10] = {} arr是一个引用,引用对象是一个含有10个int指针的数组
数组的使用
访问数组内的元素,使用数组下标,要注意不要越界
指针与数组
在很多用到数组名字的地方,编译器会自动转化为一个指向数组第一个元素的指针
int a[] = {0,1,2};
auto a2 (a); 此时a2是一个指针
对数组使用begin和end
int a[] ={1,2,3,4,5,6,7};
int *beg=begin(a);
int *en = end(a);
数组初始化vector
使用数组可以初始化vector
int arr[]={0,1,2};
vector<int> ivec(begin(arr),end(arr));
多维数组
称为数组的数组更贴切
初始化
int a[2][2]={{0,1},{1,2}};