c++ - C/C++中使用字符作为数组下标

标签 c++ arrays

用字符做数组下标可以吗?

我的数组被初始化为容纳 256 个对象,因此越界访问似乎不是问题。但是,我遇到了一些奇怪的段错误,我发现这是因为我正在读取的字符值在某些情况下是负数。

不过,我不知道这怎么可能。然后,我将它转换为一个 unsigned char,但这也不起作用。我最终也在那里遇到了边界问题。我还尝试将 char 变量转换为 int,然后访问该数组,但我仍然遇到分段问题。

我可以做些什么来缓解这种情况?能够通过字符访问数组很好,因为我的程序为 ASCII 集中的每个字符都有一个数组单元格。好像有道理,就是不知道为什么不行。

最佳答案

使用字符类型的值作为数组索引是完全有效的。数组索引可以是任何整数类型; charunsigned charsigned char都是整数类型。

但是普通 char 可以是有符号的或无符号的,这取决于实现。要么与 signed char 具有相同的范围,要么与 unsigned char 具有相同的范围;无论哪种方式,它仍然是一个独特的类型。

因此,如果你有一个包含 256 个元素的数组,你可以安全地使用 unsigned char 对其进行索引,它的范围至少为 0 到 255。你不能安全地使用 对其进行索引>char,因为它可能有负值。

Then, I casted it to an unsigned char, but that didn't work either. I ended up getting boundary issues there as well.

如果没有更多信息,我无能为力。

关于c++ - C/C++中使用字符作为数组下标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11715869/

相关文章:

java - 查找数组中不匹配的元素

javascript - 使用 Array 对象作为 ES6 Map 的键

c++ - 如何计算具有 n 位小数的 float

C++ 从枚举值 decltype

java - 使用多个线程填充静态数组

Java arraylist 找不到构造函数,使用 arrays.aslist

java - 如何从文件交替变量中读取值?

c# - 从 C# 调用 C++ DLL 函数时崩溃

c++ - C++中的单链表赋值运算符重载

c++ - 使用两个参数但不进行赋值来调用 new 运算符