1. 复合类型
1.1. 4.1 数组
数组(array)是一种数据格式,能够存储多个同类型的值
。
要创建数组,可使用声明语句,数组声明应指出以下三点:
- 存储在每个元素中的值的类型
- 数组名
- 数组中的元素数
在C++中,可以通过修改简单变量的声明,添加中括号(其中包含元素的数目)来完成数组声明:short months[12];
代表创建了一个名为months的数组,该数组有12个元素,每个元素都可以存储一个short类型的值。
可以归纳为:typeName assayName[arraySize];
arraySize必须是整数常数,或const值。arraySize不可以是变量。
🧾 程序清单4.1
1 | int main() |
1.1.1. 数组的初始化规则
只有在定义的时候才可以使用初始化,此后就不能使用了,例如:
1
2
3int cards[3] = {1,2,3}; // valid
int hands[4];
hands[4] = {1,2,3,4} // non-valid不可以将一个数组赋给另一个数组:
1
hands = cards; // not allowed
可以使用下标分别给数组中的元素赋值
初始化数组的时候,提供的值可以少于数组的元素数目。下面的语句只初始化hotelTips的前两个元素:
float hotelTips[5] = {5.0, 2.5};
如果只对数组的一部分初始化,编译器将自动把其他元素设置为0。
因此,如果想把数组中所有元素都初始化为0非常简单,只需要把第一个元素初始化为0即可。long totals[5000] = {0};
- 如果初始化数组时方括号内[]为0,那么C++编译器将计算元素的个数。
例如,对于:short things[] = {1,5,3,8};
编译器使things数组包含4个元素。
1.1.2. C++11 数组初始化方法
初始化数组时,可省略等号(=)
1
double earning[4]{1.2,1.2,1.2,1.2};
可以不在大括号内包含任何内容,这将把所有元素都设置为零。
1
2unsigned int counts[10] = {}; // all elements set to 0
float balances[100] = {}; // all elements set to 0列表初始化禁止缩窄转换
long plifs[] = {25,92,1.0}; // not allowed
这条语句不能通过是因为,浮点数转换为整型(long)是缩窄操作,即便浮点数小数点后为零。
char slifs[4]{'h','i',1122011,'\0'}; // not allowed
这条语句不能通过,因为1122011超过了char变量的取值范围
char tlifs[4]{'h','i',112,'\0'}; // allowed
这条语句可以通过编译,因为虽然112是一个int值,但它在char变量的取值范围内