【问题标题】:Need help deconstructing RosettaStone Huffman Code需要帮助解构 RosettaStone Huffman 代码
【发布时间】:2015-05-06 20:15:33
【问题描述】:

我正在和几个朋友一起学习 C 语言。我们正在做一个关于霍夫曼编码的项目,我正在尝试理解代码的罗塞塔石碑版本。我想我已经弄清楚了大部分,但我不了解几个变量。

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是什么意思。

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

【问题讨论】:

    标签: encoding huffman-code rosetta-stone


    【解决方案1】:

    声明:

    typedef struct node_t { ... } *node;
    

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

    然后

    node ..., *q = ...
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-29
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多