6.1、数组
数组是基于C++基本整型和浮点类型创建的复合类型,它是一种数据格式、能够存储多个同类型的值。每个值都存储在一个独立的数组元素中,计算机在内存中一次存储数组的各个元素。
要创建数组,可使用声明语句,应指出以下三点:
(1)存储在每个元素中的值的类型;
(2)数组名;
(3)数组的元素数。
在C++中,可以通过修改简单变量的声明,添加中括号(其中包含元素数目)来完成数组声明,例如,创建一个months的数组,有12个元素,都可以存储一个short类型的值:
short months[12];
通用格式是这样:
typeName arrayName[arraySize];
表达式arraySize指定元素数目,它必须是整型常数或const值,也可以是表达式(如8*sizeof(int)),准确来说,arraySize的值不能是变量。
注:months的类型不是“数组”,而是“short数组”。强调months数组是使用short类型创建的。
访问数组元素方法是使用下标或索引来对元素进行编号。C++数组从0开始编号,一定是从0开始!!!C++使用带索引的方括号表示法来指定数组元素。例如,months[0]是months数组第一个元素,months[11]是months数组最后一个元素。
注:编译器不会检查使用的下标是否合法。你可以给设定元素数目大小外的数组进行赋值,但是会引发问题,因此必须确保下标有效。
6.1.1、程序说明
#include <iostream>
int main()
{
using namespace std;
int yams[3];
yams[0] = 7;
yams[1] = 8;
yams[2] = 6;
int yamcosts[3] = { 20,30,5 };
cout << "Total yams = ";
cout << yams[0] + yams[1] + yams[2] << endl;
cout << "The package with " << yams[1] << " yams costs ";
cout << yamcosts[1] << " cents per yam.\n";
int total = yams[0] * yamcosts[0] + yams[1] * yamcosts[1];
total += yams[2] * yamcosts[2];
cout << "The total yam expense is " << total << " cents.\n";
cout << "\nSize of yams array = " << sizeof yams;
cout << " bytes." << endl;
cout << "\nSize of one elements = " << sizeof yams[0];
cout << " bytes." << endl;
return 0;
}
程序说明:
该程序创建了名为yams的包含3个元素的数组。每个元素都是int类型,通过索引给3个元素分别赋值。程序给yams的元素赋值时,绕了个大弯。如:
int yamcosts[3]={20,30,5};
只需提供一个用逗号分隔的值列表(初始化列表),并将它们用花括号括起来即可。如果没有初始化函数定义中定义的函数,则其元素值将是不确定的,这意味着元素的值为以前驻留在该内存单元的值。
sizeof运算符返回类型或数据对象的长度(单位为字节)。注意,如果将sizeof运算符用于数组名,得到的是整个数组中的字节数。但如果将sizeof用于数组元素,则得到的将是元素的长度(单位为字节)。这表明yams是一个数组,而yams[0]只是一个int变量。
6.1.2、数组的初始化规则
只有在定义数组时才能使用初始化,此后将不能使用,也不能将一个数组赋给另一个数组,然而可以使用下标分别给数组中的元素赋值。
初始化数组时,提供的值可以少于数组的元素数目,例如:float yuanshi[4]={5.0,2.5}。
(1)如果只对数组的一部分进行初始化,则编译器将把其他元素设置为0;
(2)如果将数组第一个元素初始化为0,其他元素也会被初始化为0;
(3)如果初始化为{1},则第一个元素被设置成1,其他元素都被设置为0.
(4)如果初始化数组时方括号内([ ])为空,C++编译器将会计算元素个数。例如:
short xingsheng[]={1,6,7,9};
编译器将使xingsheng数组包含4个元素。