需要帮助解构RosettaStone Huffman Code

时间:2015-05-06 20:15:33

标签: encoding huffman-code rosetta

我和几个朋友在C上上课。我们正在做一个关于Huffman Encoding的项目,我正在尝试理解代码的Rosetta石版本。我想我已经把它的大部分都弄清楚了,但我不明白一些变数。

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;

有人可以向我解释*节点的含义,以及qqq [255]是什么节点,以及* q = qqq-1的含义。

我问的唯一原因是我认为我在理解中某处出错,因为我并没有真正得到这些指针节点之间的关系。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

宣言:

typedef struct node_t { ... } *node;

node类型定义为node_t结构的指针(似乎是典型的二进制搜索节点)。 因此,虽然pool[]node_t结构的数组,但qqq[]指针的数组(对于所述结构)。现在将qqq视为指向某些(堆栈保留)字节的开头的指针,以保存一堆指针(255*sizeof(node)255*sizeof(struct node_t*)字节)。

然后

node ..., *q = ...

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

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

据推测,接下来是一个循环,其中q是一个预先递增的迭代器遍历qqq的数据。