正文

for循環(huán)、字符串與數(shù)組(10)

通過游戲編程實戰(zhàn)教新手學C++編程 作者:(美)Michael Dawson


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]可能導致災難性后果,如程序崩潰。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號