我和几个朋友在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的含义。
我问的唯一原因是我认为我在理解中某处出错,因为我并没有真正得到这些指针节点之间的关系。
非常感谢任何帮助。
答案 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
的数据。