3.4.2 創(chuàng)建數(shù)組
將數(shù)組中元素的個數(shù)定義為常量是個不錯的想法。程序就使用了MAX_ITEMS來表示主人公所能攜帶的最大物品數(shù)目。
const int MAX_ITEMS = 10;
聲明數(shù)組的方法和聲明已見過的變量的方式非常類似:提供一個類型和一個名稱。另外,編譯器必須知道數(shù)組的大小,這樣才能預留出需要的內(nèi)存空間。數(shù)組大小的信息可以用方括號括起來,然后置于數(shù)組名之后。下面給出聲明表示主人公物品欄的數(shù)組的方式:
string inventory[MAX_ITEMS];
上面代碼聲明了一個大小為MAX_ITEMS的string對象數(shù)組inventory(因為MAX_ITEMS為10,所以表示10個string對象)。
陷阱
聲明數(shù)組的時候,可以通過提供一個初始值列表來對數(shù)組進行初始化。初始值列表是用花括號括起來的元素序列,其中元素用逗號隔開。如下例所示:
string inventory[MAX_ITEMS] = {"sword", "armor", "shield"};
這段代碼聲明了大小為MAX_ITEMS的string對象數(shù)組inventory。數(shù)組的前3個元素初始化為"sword"、"armor"和"shield"。
如果在使用初始值列表的時候忽略元素個數(shù),那么創(chuàng)建的數(shù)組大小就等于列表中元素的個數(shù)。下面給出一個例子:
string inventory[] = {"sword", "armor", "shield"};
因為初始值列表中有3個元素,因此這行代碼創(chuàng)建了一個大小為3的數(shù)組inventory,其中元素是"sword"、"armor"和"shield"。
3.4.3 數(shù)組的索引
索引數(shù)組的方式和索引string對象非常類似??梢允褂盟饕柡拖聵诉\算符([])來訪問任意單個元素。
接下來,程序用下標運算符給物品欄添加了3個物品:
int numItems = 0;
inventory[numItems++] = "sword";
inventory[numItems++] = "armor";
inventory[numItems++] = "shield";
程序首先定義了numItems,它表示主人公當前攜帶的物品數(shù),然后將"sword"賦值給了數(shù)組的位置0。因為使用的是后置遞增運算符,所以數(shù)組被賦值后numItems才遞增。接下來兩行將"armor"和"shield"添加到數(shù)組中。代碼結(jié)束后,numItems理所當然地成為了3。
主人公已經(jīng)儲備了一些物品,現(xiàn)在顯示一下他的物品欄:
cout << "Your items:\n";
for (int i = 0; i < numItems; ++i)
{
cout << inventory[i] << endl;
}
這段代碼應當讓人回憶起字符串索引。代碼循環(huán)訪問inventory的前3個元素,并按順序顯示每個string對象。
接下來,主人公用他的劍換來了一把戰(zhàn)斧。這由下面一行代碼完成:
inventory[0] = "battle axe";
這段代碼用string對象"battle axe"給inventory中位置0的元素重新賦值。于是,inventory的前3個元素分別為"battle axe"、"armor"和"shield"。
陷阱
數(shù)組從0開始索引,正如string對象一樣。也就是說下面代碼定義了一個包含5個元素的數(shù)組:
int highScores[5];
合法位置從0到4(包括0和4)。不存在元素highScores[5]!嘗試訪問highScores[5]可能導致災難性后果,如程序崩潰。