3.4.5 数组边界
之前已经介绍过,索引数组时要小心。因为数组的大小是固定的,所以可以创建一个整型常量存储数组的大小。程序的开头部分就采取了这种做法:
- const int MAX_ITEMS = 10;
下面代码在给主人公添加物品之前使用MAX_ITEMS进行数组保护:- if (numItems < MAX_ITEMS)
- {
- inventory[numItems++] = "healing potion";
- }
- else
- {
- cout << "You have too many items and can’t carry another.";
- }
这段代码首先检测numItems是否小于MAX_ITEMS。如果小于,则可以安全地把numItems当作索引号使用,并赋给数组一个新的string对象。在本例中,numItems为3,所以字符串"healing potion"赋给了数组的位置3。如果不满足小于条件,则显示消息"You have too many items and can't carry another."。
那么,如果使用数组边界以外的元素会怎样?这要视情况而定,因为这是在使用计算机内存中未知的部分。最坏的情况是,如果试图给数组边界外的元素赋值,将导致程序行为不可预测,甚至程序崩溃。
可以在使用索引号之前对其进行测试,以确保它是合法的数组位置。这种做法叫做边界检查。如果要使用的索引可能不合法,那么边界检查是必不可少的。