我遇到过如下代码
bool* keyStates = new bool[256];
void keyPressed(unsigned char key, int x, int y) {
keyStates[key] = true; // Set the state of the current key to pressed
}
对我来说有一个问题。
正如您所看到的,key
是char
,因此它的值类似于'a'
。
keyStates
是一组指向bool变量的指针。
因此,我无法理解为什么像keyStates['a']
这样的东西应该是真的?
在我看来它就像一个关联数组。正确?
答案 0 :(得分:3)
每个字符由唯一编号表示,具体取决于表示 1 。在您的情况下,此唯一编号表示用作动态分配的bool
数组keyStates[]
中的索引:
char key = 'a';
keyStates[key] = true;
意味着将索引为97
的元素设置为true
。实际上,所有字符都是数组元素的唯一键/索引。
现在,回答你的问题:
因此,我无法理解为什么类似keyStates [' a']应该是真的?
在char
的定义中,人们读到:
char
:机器中最小的可寻址单元,可包含基本字符集。它是整数类型。实际类型可以是有符号或无符号,具体取决于实现。
因此,char
是一个小整数,它是一个与整数相似的整数(或指针)算术的主语。
函数的参数是unsigned char
,因为这种类型的变量的值介于0
和255
之间,而签名的字符(即char
)的值介于-128
之间{1}}和127
,不覆盖数组的所有索引,并可能访问其外部的内存。
1。 ASCII (extended ASCII)是一个示例,其中所有字符都使用0
到255
的值表示。
答案 1 :(得分:3)
和
keyStates
是一组指向bool变量的指针。
没有。 keyStates
是指向动态分配数组的第一个元素的指针。您应该知道char
可以用作数组索引。因此,keyStates['a']
属于bool
类型。它相当于*(keyStates + 'a') = *(keyStates + 97) = keyStates[97]
。 ('a'
的ASCII值为97
)。