代码中 * 的含义

The meaning of * in the code

本文关键字:代码      更新时间:2023-10-16

我遇到了如下代码

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是一组指向布尔变量的指针。

因此,我不明白为什么像keyStates['a']这样的事情应该是真的?

在我看来,它的工作方式就像一个关联数组。右?

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

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

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

现在,回答您的问题:

因此,我不明白为什么像keyStates['a']这样的东西应该是真的?

char的定义中,可以这样写:

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

因此,char是一个小整数,它是与整数类似的相同整数(或指针)算法的主题。

注意:

函数的参数是unsigned char,因为这种类型的变量的值在0255之间,而有符号字符(即 char)的值在-128127之间,没有覆盖数组的所有索引,并且可能访问数组之外的内存。


1. ASCII(扩展 ASCII)是一个例子,其中所有字符都用 0255 的值表示。

keyStates是一组指向布尔变量的指针。

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