解释c结构

时间:2012-02-12 04:08:08

标签: c pointers struct

考虑以下c代码:

typedef struct ELE *tree_ptr

struct ELE {
   long val;
   tree_ptr left;
   tree_ptr right;
};

我相信ELE封装了二叉树的单个节点。每个节点具有一些32位值(val),一个pointer到左节点,pointer到一个右节点。

有人可以确认我的解释是否正确?

此外,ELE只是一个任意变量名或用于命名struct的某些惯例吗?

编辑:

如果有一个c程序生成了以下3行汇编代码,该怎么办:

movq     %rbx, -24(%rsp)
movq     %rbp, -16(%rsp)
movq     %r12, -8(%rsp)

这3行是否为堆栈中3个结构元素腾出空间?

2 个答案:

答案 0 :(得分:2)

那很可能是ELEment,这是该集合的一个元素。

要考虑的其他几点:

  1. 你的typedef最后需要一个分号。
  2. C标准不保证long整数是32位。
  3. 类型tree_ptr表示它可能 是二叉树,但你知道的是它是一个包含long的结构和两个指向它的指针输入结构。如果将编组在一起的编码器变得疯狂或虐待狂,那么它很可能是一个双重链表: - )

答案 1 :(得分:1)

ELE是结构的所谓标记。标签驻留在与C中其他名称不同的名称空间中。(其他名称空间是各个结构和联合的成员,标签和其他名称空间(如变量名称,函数名称等))

所以ELE(最有可能是“元素”)引用结构/联合/枚举命名空间内的这个结构。