数组
数组是一种类似于标准库类型vector的复合类型。它是大小固定且只能存储相同类型对象的容器。vector中对象的类型可以是vector,类似的,数组中对象的类型也可以是数组,这就形成了多维数组。即:
多维数组是数组的数组。
一、声明及定义
数组的声明方式如下:
(Type) name[d];//type表示数组中存储的数据类型那个,d为数组的大小,其中维度d必须是一个常量表达式,其值必须大于0
定义数组的时候必须指明数组的类型,不能采用关键字 auto 由初始值得列表来进行推断。
对于复杂的数组声明,可以采用从右向左,由里向外来进行理解。
int *ptr[10];//从左到右:大小为10的数组->数组的名字为ptr->数组的类型为指针->指向的类型为int。
//那么:ptr是一个含有10个整型指针的数组。
int (&arrRef)[10] = arr;//由里到外:arrRef是个引用->引用的是大小为10的数组->数组元素类型是int。
//那么:arrRef引用一个含有10个整数的数组。
二、初始化
1、对数组的元素进行列表初始化时,可以省略其维度值,此时列表的大小即为维度的大小。
2、如果设定的维度值比列表的元素个数要多时,只会按顺序对数组中的元素值进行初始化,其余的执行默认初始化。
3、字符(char)数组的初始化可以使用字符串(string)字面值进行初始化,但此时在
数组的末尾会存在一个空字符!!!
4、数组不可以进行拷贝作为其初始值和也不能进行赋值操作,这点不同于string和vector。
三、方法
1、访问:通常采用数组下标来对数组元素进行访问,其数组下标的类型为:
size_t 类型,一种与机器相关的无符号类型,在cstddef头文件中定义。
2、数组除了大小固定之外,其他用法与vector基本类似。
四、数组与指针
1、使用数组的时候,编译器一般会将数组转化为指针;
2、在很多用到数组名字的地方,编译器会自动的将其替换为一个指向数组首元素的指针;
3、当 auto 和 decltype 作用于数组名是会产生不同的效果;auto返回的是指针类型而decltype返回的是数组类型。