代码中*的含义

时间:2016-01-17 18:51:52

标签: c++

我遇到过如下代码

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  
}

对我来说有一个问题。  正如您所看到的,keychar,因此它的值类似于'a'keyStates是一组指向bool变量的指针。

因此,我无法理解为什么像keyStates['a']这样的东西应该是真的?

在我看来它就像一个关联数组。正确?

2 个答案:

答案 0 :(得分:3)

每个字符由唯一编号表示,具体取决于表示 1 。在您的情况下,此唯一编号表示用作动态分配的bool数组keyStates[]中的索引:

char key = 'a';
keyStates[key] = true;

意味着将索引为97的元素设置为true。实际上,所有字符都是数组元素的唯一键/索引。

现在,回答你的问题:

  

因此,我无法理解为什么类似keyStates [' a']应该是真的?

char的定义中,人们读到:

  

char:机器中最小的可寻址单元,可包含基本字符集。它是整数类型。实际类型可以是有符号或无符号,具体取决于实现。

因此,char是一个小整数,它是一个与整数相似的整数(或指针)算术的主语。

注意:

函数的参数是unsigned char,因为这种类型的变量的值介于0255之间,而签名的字符(即char)的值介于-128之间{1}}和127,不覆盖数组的所有索引,并可能访问其外部的内存。

1。 ASCII (extended ASCII)是一个示例,其中所有字符都使用0255的值表示。

答案 1 :(得分:3)

  

keyStates是一组指向bool变量的指针。

没有。 keyStates是指向动态分配数组的第一个元素的指针。您应该知道char可以用作数组索引。因此,keyStates['a']属于bool类型。它相当于*(keyStates + 'a') = *(keyStates + 97) = keyStates[97]。 ('a'的ASCII值为97)。