struct node
{
int coef;
int exp;
struct node *link;
};
typedef struct node *NODE;
答案 0 :(得分:18)
它将NODE
定义为类型struct node *
的同义词,因此当您声明类型为NODE
的变量时,您实际上会声明指向{{1}的指针}}
就个人而言,我认为这样的声明不是一个好主意:你是“隐藏指针”(这几乎总是一个坏主意),而且,你并没有以任何方式突出这个事实。新名称。
答案 1 :(得分:7)
它使NODE
成为struct node *
的typedef。
答案 2 :(得分:7)
NODE
成为struct node*
的别名。
编辑:好的,对于评论(如果我把我的答案写成评论,它会太长而且没有格式化):
没有不同的方式来写这个。在这里,typedef
仅用于为指针创建struct node
的同义词/别名。
使用的一个例子是:
void f()
{
// some code
NODE p = NULL;
// do something with p
// for example use malloc and so on
// like: p = malloc( sizeof( struct node ) );
// and access like: p->coef = ..; p->expr = ..
// do something with p and free the memory later (if malloc is used)
}
与
相同void f()
{
// some code
struct node* p = NULL;
// do something with p
}
使用NODE
会让它变得更短(无论如何,我不建议这样的typedef
,因为你正在隐藏它,它是指针,而不是{{ 1}}或其他类型,如@Matteo Italia的回答中所述。
您所指的格式:“typedef struct {} type_name format”是其他内容。这是struct
中的一种技巧,可以避免编写C
关键字(因为它在struct
中是强制性的,而不是在C
中)。所以
C++
会为typedef struct node
{
//..
} NODE;
设置NODE
别名。所以,与上面相同的例子:
struct node
与
相同void f()
{
// some code
NODE p;
// do something with p
// note that now p is automatically allocated, it's real struct
// not a pointer. So you can access its members like:
// p.coef or p.expr, etc.
}
请注意,现在,void f()
{
// some code
struct node p;
// do something with p
}
是 NOT 指针,它是p
。
答案 3 :(得分:0)
简单地告诉你每次只能使用NODE创建节点类型的指针而不是每次都写入struct node *
答案 4 :(得分:-3)
typedef struct node *NODE
表示什么?
IT指出一名并未了解到这种情况并不好的人
为 MACROS 保留 ALL UPPERCASE 标识符。
干杯&第h。,