假设我们有一个如下定义的堆栈:
typedef struct node
{
int data;
struct node *next;
} node;
我从一本书中复制了这个定义,但我不确定最后两行是做什么的。最后的节点声明是否与结构声明有关,还是只是我们正在创建的对象?
答案 0 :(得分:1)
代码相当于:
struct node
{
int data;
struct node *next;
};
typedef struct node node;
通过将typedef
与struct node
类型分开,您可以更轻松地看到代码中的node
是struct 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名称,可以像任何类型一样使用。
我试过给出通用语法。希望你明白。