[英]Get size of 3D char* Array
我正在嘗試制作一個多維數組,其中包含武器及其附件:我有很多這樣的數組:
char *G18[19] = { "glock_mp", "glock_akimbo_mp", "glock_eotech_mp", "glock_fmj_mp", "glock_reflex_mp", "glock_silencer_mp", "glock_xmags_mp", "glock_akimbo_fmj_mp", "glock_akimbo_silencer_mp", "glock_akimbo_xmags_mp", "glock_eotech_fmj_mp",
"glock_eotech_silencer_mp", "glock_eotech_xmags_mp", "glock_fmj_reflex_mp", "glock_fmj_silencer_mp", "glock_fmj_xmags_mp", "glock_reflex_silencer_mp", "glock_reflex_xmags_mp", "glock_silencer_xmags_mp" };
但是所有武器都不屬於同一類別,例如AK47是突擊步槍,而G18是機槍。 因此,我創建了表示類別的2D數組,如下所示:
char **MACHINEGUNS[4] = { G18, TMP, RAFFICA, PP2000 };
所以現在我對武器進行了排序,我創建了另一個數組,其中應該包含類別,如下所示:
char ***WEAPONS[7] = { ASSAULTRIFLES, SUBMACHINEGUNS, LIGHTMACHINEGUNS, SNIPERS, PISTOLS, MACHINEGUNS, SHOTGUNS };
獲得像
char *weapon = WEAPONS[assaultrifle][ak47][0]; // assaultrifle & ak47 are enum mebers
工作完美。 我面臨的問題是我無法獲得行和列的大小。 如果我想知道他們有多少種武器,我會做:
sizeof(WEAPONS)
這給了我7.如果我想知道我有多少支突擊步槍:
sizeof(WEAPONS[assaultrifles])
但這是問題所在:盡管突擊步槍的陣列大小為9,這給了我4:
char **ASSAULTRIFLES[9] = { AK47, M16A4, M4A1, FN2000, ACR, FAMAS, FAL, SCARH, TAR21 };
如果我這樣做,它也會返回4:
sizeof(WEAPONS[assaultrifles][ak47])
即使ak47的陣列大小為39。不知道為什么它不能正常工作,我怎么能做到這一點? 在此先感謝您,冗長的文字對不起!
在C或C ++中,沒有在運行時“獲取數組大小”的東西。 您可以使用sizeof
獲得數組的大小(用[<size>]
),因為它的大小在編譯時是已知的。 當您獲得一個指針的sizeof
您實際上是在獲取一個指針占用了多少字節,這就是為什么要得到4。如果您想在運行時知道向量的大小,通常的選擇是:
std::vector
和STL容器 。 有上百萬的教程和示例可供您檢查。 struct
或class
。 這有點像滾動您自己的有限std::vector
,並且您必須小心在必要時正確釋放內存,依此類推,因此我不確定這是一個不錯的選擇。 NULL
/ nullptr
,然后遍歷整個過程,直到每次需要查找大小時都達到它為止。 低效且容易出錯。 因此,簡而言之,請使用std::vector
或其他容器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.