当前位置:  开发笔记 > 编程语言 > 正文

字符串可以用作数组索引吗?

如何解决《字符串可以用作数组索引吗?》经验,为你挑选了2个好方法。

字符串可以在C中用作数组索引吗?

例如:字符串对应值"ONE"1"TWO"2"五"5"十"10

当上面列表中的字符串传递给函数时,该函数必须返回上面指出的相应值.可以通过声明一个以字符串作为索引的常量数组来实现

int *x;
x["ONE"]  = 1;
x["TWO"]  = 2;
x["FIVE"] = 5;
x["TEN"]  = 5;

return x["string received by the function"];

上述逻辑不能按预期工作; 是否有一个解决方法来实现上述逻辑,以便有一个字符串索引数组?



1> Hank Gay..:

它可能会编译,但它不起作用.

你想要实现的目标并不完全清楚.我想你想要一个关联数组,在这种情况下你应该找到一个库实现.

如果您正在寻找更像枚举类型的东西,并且您可以依赖C89,请查看以下内容:

enum cardsuit {
   CLUBS,
   DIAMONDS,
   HEARTS,
   SPADES
};

如果你不能依赖C89,那么你应该尝试一些typedef技巧.



2> David Thornl..:

对于你应该做的事情还有其他很好的答案,所以我想我会解释你在做什么以及为什么它正在编译而不能正常工作.

在C中,通过使用数组或指针以及某种整数来完成数组引用.(在x [1]中,x是数组,1是整数).只要你使用某种整体类型,它就会像你期望的那样工作.

假设你有一些不是整数的东西.在这种情况下,C实现将查看它是否可以将其转换为适当的类型,因此您最终得到数组和整数.在这种情况下,你遇到了麻烦(在C++中稍微复杂一点的版本让更多有经验的人感到困惑).

在C中,像"one"这样的文字字符串是const char*类型,意味着指向您无法更改的字符.实际值是字符串实际驻留在内存中的内存地址.通常,你不会注意这个指针值,看看字符串值,但这里有一个问题.

在C中,任何数据指针都可以转换为某种整数,并且将自动转换.因此,你有一个像"one"这样的字符串,它的值是代表内存地址的任何数字.在C期望某种整数的情况下使用它,它将被转换为某个整数值或其他值.

因此,这就是x ["ONE"]正在发生的事情.C系统必须将字符串"ONE"放在内存中的哪个位置,并不重要.它很可能是一个内存相当大的地方,很可能是数十亿.当它看到x ["ONE"]时,它会尝试将该值转换为整数,并将其用作下标.因此,您尝试远远超出其范围访问数组x,这导致了问题.要么你正在尝试使用你不允许使用的内存,而系统只是阻止你,或者你正在捣乱你应该独自留下的一大块内存,而且它可能会以某种神秘的方式失败.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有