Encoding 需要帮助解构RosettaStone-Huffman代码吗

Encoding 需要帮助解构RosettaStone-Huffman代码吗,encoding,huffman-code,rosetta-stone,Encoding,Huffman Code,Rosetta Stone,我和几个朋友一起上C语言课。我们正在做一个关于哈夫曼编码的项目,我正试图理解Rosetta stone版本的代码。我想我已经弄明白了大部分,但我不明白几个变量 typedef struct node_t { struct node_t *left, *right; int freq; char c; } *node; struct node_t pool[256] = { { 0 } }; node qqq[255], *q = qqq - 1; 有人能给我解释一下*

我和几个朋友一起上C语言课。我们正在做一个关于哈夫曼编码的项目,我正试图理解Rosetta stone版本的代码。我想我已经弄明白了大部分,但我不明白几个变量

typedef struct node_t {
    struct node_t *left, *right;
    int freq;
    char c;
} *node;

struct node_t pool[256] = { { 0 } };
node qqq[255], *q = qqq - 1;
有人能给我解释一下*node是什么意思,什么是node qqq[255],什么是*q=qqq-1

我问这个问题的唯一原因是,我认为我在理解中犯了一个错误,因为我没有真正了解这些指针节点之间的关系

宣言:

typedef struct node_t { ... } *node;
节点
类型定义为指向
节点
结构(看起来是典型的二进制搜索节点)的指针。 因此,
pool[]
是一个节点结构数组,
qqq[]
是一个指针数组(指向所述结构)。现在将
qqq
看作指向某些(堆栈保留)字节开始的指针,以容纳一组指针(
255*sizeof(node)
255*sizeof(struct node_t*)
bytes)

然后

类似之处在于它将
q
定义为指向
节点
s的指针,但不保留任何字节。相反,
q
被初始化为指向
qqq-1
,这可能意味着“指向
qqq
之前的
sizeof(node)

(虽然最后一段指针算法可能有效,但指向
qqq
之外并不是一个好主意,因为添加减法指针只是在结果地址在定义范围内时定义的行为。)

假设接下来是一个循环,
q
是一个预先递增的迭代器,遍历
qqq
s数据

node ..., *q = ...