0%

C++PrimerPlus_4.1数组

1. 复合类型

1.1. 4.1 数组

数组(array)是一种数据格式,能够存储多个同类型的值

要创建数组,可使用声明语句,数组声明应指出以下三点:

  • 存储在每个元素中的值的类型
  • 数组名
  • 数组中的元素数

在C++中,可以通过修改简单变量的声明,添加中括号(其中包含元素的数目)来完成数组声明:
short months[12];
代表创建了一个名为months的数组,该数组有12个元素,每个元素都可以存储一个short类型的值。
可以归纳为:typeName assayName[arraySize];

arraySize必须是整数常数,或const值。arraySize不可以是变量。

🧾 程序清单4.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main()
{
using namespace std;

int yams[3]; // initialize int array with size of 3 elements
yams[0] = 7; // assign value to the first element of yams
yams[1] = 8;
yams[2] = 6;

// another way to initialize and assgin values to an array of integers
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 = total + yams[2]*yamcosts[2];


cout << "The total yam expense is " << total << " cents.\n";

// 显示array的长度,显示array中一个element的长度
cout << "Size of yams array = " << sizeof yams << " bytes. \n";
cout << "Size of one element " << sizeof yams[0] << " bytes. \n";

return 0;
}

1.1.1. 数组的初始化规则

  1. 只有在定义的时候才可以使用初始化,此后就不能使用了,例如:

    1
    2
    3
    int cards[3] = {1,2,3}; // valid
    int hands[4];
    hands[4] = {1,2,3,4} // non-valid
  2. 不可以将一个数组赋给另一个数组:

    1
    hands = cards; // not allowed
  3. 可以使用下标分别给数组中的元素赋值

  4. 初始化数组的时候,提供的值可以少于数组的元素数目。下面的语句只初始化hotelTips的前两个元素:
    float hotelTips[5] = {5.0, 2.5};

如果只对数组的一部分初始化,编译器将自动把其他元素设置为0。

因此,如果想把数组中所有元素都初始化为0非常简单,只需要把第一个元素初始化为0即可。
long totals[5000] = {0};

  1. 如果初始化数组时方括号内[]为0,那么C++编译器将计算元素的个数。
    例如,对于:
    short things[] = {1,5,3,8};编译器使things数组包含4个元素。

1.1.2. C++11 数组初始化方法

  1. 初始化数组时,可省略等号(=)

    1
    double earning[4]{1.2,1.2,1.2,1.2};
  2. 可以不在大括号内包含任何内容,这将把所有元素都设置为零。

    1
    2
    unsigned int counts[10] = {}; // all elements set to 0
    float balances[100] = {}; // all elements set to 0
  3. 列表初始化禁止缩窄转换
    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变量的取值范围内

-------------本文结束感谢您的阅读-------------