typedef struct node * NODE表示什么?

时间:2011-10-29 19:56:47

标签: c

struct node
{
    int coef;

    int exp;

    struct node *link;
};

typedef struct node *NODE;

5 个答案:

答案 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。,