自引用堆栈

时间:2014-10-24 06:24:19

标签: c stack typedef

假设我们有一个如下定义的堆栈:

typedef struct node
{
    int data;
    struct node *next;
} node;

我从一本书中复制了这个定义,但我不确定最后两行是做什么的。最后的节点声明是否与结构声明有关,还是只是我们正在创建的对象?

2 个答案:

答案 0 :(得分:1)

代码相当于:

struct node
{
    int data;
    struct node *next;
};

typedef struct node node;

通过将typedefstruct node类型分开,您可以更轻松地看到代码中的nodestruct node的别名typedef }。

答案 1 :(得分:0)

考虑最后两行:

1:

struct node *next;

解释:您正在创建类型为struct node的指针变量(即next),并且能够保存相同类型的地址。通常,当您想要动态实现堆栈操作时,就会出现这个概念。

+--+----+    +--+----+    +--+----+    +--+----+
|10|2000|    |20|3000|    |30|4000|    |40|NULL|
+--+----+    +--+----+    +--+----+    +--+----+
  1000         2000         3000         4000

可以看出,下一部分是处理另一个结构的地址,因此你需要类型为struct node的指针。

2:

typedef struct {
type1 fieldname1;
type2 fieldname2;
....
typeN fieldnameN;
} NEW_TYPE;

NEW_TYPE variable_identifier;

这里NEW_TYPE是typedef名称,可以像任何类型一样使用。

我试过给出通用语法。希望你明白。