簡體   English   中英

獲取3D char *數組的大小

[英]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::vectorSTL容器 有上百萬的教程和示例可供您檢查。
  • 而不是存儲原始數組(或指向數組的指針),而是存儲包含指向數組和大小的指針的簡單structclass 這有點像滾動您自己的有限std::vector ,並且您必須小心在必要時正確釋放內存,依此類推,因此我不確定這是一個不錯的選擇。
  • 其他一些類似於C的骯臟技巧,例如在每個數組的末尾添加NULL / nullptr ,然后遍歷整個過程,直到每次需要查找大小時都達到它為止。 低效且容易出錯。

因此,簡而言之,請使用std::vector或其他容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM