首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取三维字符阵列的大小

获取三维字符阵列的大小
EN

Stack Overflow用户
提问于 2017-07-27 16:37:06
回答 1查看 138关注 0票数 0

我正在尝试构建一个多维数组,它包含武器及其附件:我有很多这样的数组:

代码语言:javascript
复制
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是机枪。所以我创建了二维数组来表示一个类别,如下所示:

代码语言:javascript
复制
char **MACHINEGUNS[4] = { G18, TMP, RAFFICA, PP2000 };

所以现在我对武器进行了排序,我创建了另一个数组,它应该保存这些类别,如下所示:

代码语言:javascript
复制
char ***WEAPONS[7] = { ASSAULTRIFLES, SUBMACHINEGUNS, LIGHTMACHINEGUNS, SNIPERS, PISTOLS, MACHINEGUNS, SHOTGUNS };

获取武器,比如

代码语言:javascript
复制
char *weapon = WEAPONS[assaultrifle][ak47][0]; // assaultrifle & ak47 are enum mebers

效果很好。我面临的问题是我无法得到行和列的大小。F.e.如果我想知道他们的武器等级是多少,我会这么做:

代码语言:javascript
复制
sizeof(WEAPONS)

这给了我7。如果我想知道我有多少突击队员:

代码语言:javascript
复制
sizeof(WEAPONS[assaultrifles])

但问题是:这给了我4个,尽管攻击的数组大小是9:

代码语言:javascript
复制
char **ASSAULTRIFLES[9] = { AK47, M16A4, M4A1, FN2000, ACR, FAMAS, FAL, SCARH, TAR21 };

如果我这样做,它也会返回4:

代码语言:javascript
复制
sizeof(WEAPONS[assaultrifles][ak47])

即使39 47的阵列大小是39。你知道为什么不管用吗?我怎么能做到这一点?提前感谢,为长时间的短信感到抱歉!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-27 16:55:24

在C或C++中,没有像在运行时“获取数组的大小”这样的事情。您可以使用[<size>]获得数组的大小(用sizeof声明),因为它的大小是在编译时已知的。当您获得sizeof a指针时,您实际上得到了指针所需的字节数,这就是为什么要得到4个字节的原因。如果您想在运行时知道向量的大小,典型的选项是:

  • 一般使用std::vectorSTL集装箱。有一百万个教程和例子,你可以检查这一点。
  • 不要存储原始数组(或指向数组的指针),而是存储简单的structs或classes,其中包含指向数组的指针和大小。这有点像滚动自己的、有限的std::vector,您必须小心地在必要的地方正确释放内存等等,所以我不确定这是一个很好的选择。
  • 其他一些类似C的脏技巧,比如在每个数组的末尾添加NULL/nullptr,然后遍历整个过程,直到每次需要找到大小时才到达。效率低,容易出错。

所以,是的,简而言之,使用std::vector或其他容器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45356474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档