(16)数组

数组是一种类似于标准库类型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是一种机器相关的无
符号类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值