(16)数组

来源:互联网 发布:中建七局网络教育 编辑:程序博客网 时间:2024/06/10 20:09

数组是一种类似于标准库类型vector的数据结构,元素储存在连续的存储空间内。

数组与vector的异同
同:数组也是存放类型相同的对象的容器,这些对象本身没有名字,需要通过其所在的位置访问。
异:数组的大小确定不变,不能随意向数组中增加元素。
所以如果不清楚元素的确切个数,请使用vector。

同时数组也是一种复合类型,数组声明形式:a[d],其中a是数组的名字,d是数组的维度。数组中元素的个数也属于数组类型的一部分,编译的时候维度应该是已知的,而且是结果不为0的常量表达式。

和内置类型的变量一样,如果在函数内部定义了某种内置类型的数组,那么默认初始化会令数组含有未定义的值。定义数组的时候必须指定数组的类型,不允许用auto关键字由初始值的列表推断类型,而且数组的元素应为对象,因此不存在引用的数组。

在对数组进行列表初始化时,允许忽略数组的维度。编译器会根据初始值数量计算并推测出来。如果指明了维度,数组元素的数量不应超过维度的大小。假如维度比提供的初始值数量大,则提供的初始值初始化靠前的元素,剩下的元素被初始化成默认值。

注意:不允许一个数组初始化或复制给另一个数组。

字符数组有一种额外的初始化形式,我们可以用字符串常量对此类数组进行初始化。使用这种方式时,要注意字符串字面
值的结尾处还有一个空字符,这个空字符会像其他字符一样拷贝到字符数组中。如:

char a1[]={'c'};//没有空字符char a2[]={'c','\0'};//维度为2,显示包含空字符char a3[]="hello";//自动添加char a4[6]="daniel"//错误,没有足够空间存放空字符

数组的声明:
数组能存放大多数类型的对象,比如:指针。所以要理清楚存放指针的数组、数组的指针、数组的引用之间的区别。

int *ptr[10];//ptr是含有10个整型指针的数组int &ptr1[10];//错误,不存在存放引用的数组int (*ptr2)[10]=&arr//ptr2指向一个含有10个整数的数组int (&ptr3)[10]=arr//ptr3引用一个含有10个整数的数组


数组对修饰符并没有限制:

int *(&array)[10]= ptr//array是数组的引用,该数组含有10个指针
要想理解数组声明的含义,最好的办法是从数组的名字开始按照由内向外的顺序阅读。

访问数组元素的方法:

一下标运算符
二范围for语句
用法和string和vector的相同,但是在使用数组下标的时候,通常将下标定义为size_t类型。size_t是一种机器相关的无
符号类型。

0 0
原创粉丝点击