我正在尝试构建一个多维数组,它包含武器及其附件:我有很多这样的数组:
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" };但并非所有武器都属于同一类别,f.e。AK47是突击步枪,G18是机枪。所以我创建了二维数组来表示一个类别,如下所示:
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效果很好。我面临的问题是我无法得到行和列的大小。F.e.如果我想知道他们的武器等级是多少,我会这么做:
sizeof(WEAPONS)这给了我7。如果我想知道我有多少突击队员:
sizeof(WEAPONS[assaultrifles])但问题是:这给了我4个,尽管攻击的数组大小是9:
char **ASSAULTRIFLES[9] = { AK47, M16A4, M4A1, FN2000, ACR, FAMAS, FAL, SCARH, TAR21 };如果我这样做,它也会返回4:
sizeof(WEAPONS[assaultrifles][ak47])即使39 47的阵列大小是39。你知道为什么不管用吗?我怎么能做到这一点?提前感谢,为长时间的短信感到抱歉!
发布于 2017-07-27 16:55:24
在C或C++中,没有像在运行时“获取数组的大小”这样的事情。您可以使用[<size>]获得数组的大小(用sizeof声明),因为它的大小是在编译时已知的。当您获得sizeof a指针时,您实际上得到了指针所需的字节数,这就是为什么要得到4个字节的原因。如果您想在运行时知道向量的大小,典型的选项是:
std::vector和STL集装箱。有一百万个教程和例子,你可以检查这一点。structs或classes,其中包含指向数组的指针和大小。这有点像滚动自己的、有限的std::vector,您必须小心地在必要的地方正确释放内存等等,所以我不确定这是一个很好的选择。NULL/nullptr,然后遍历整个过程,直到每次需要找到大小时才到达。效率低,容易出错。所以,是的,简而言之,使用std::vector或其他容器。
https://stackoverflow.com/questions/45356474
复制相似问题