typedef struct node*NODE表示什么?

Skr*_*Skr 12 c

struct node
{
    int coef;

    int exp;

    struct node *link;
};

typedef struct node *NODE;
Run Code Online (Sandbox Code Playgroud)

Mat*_*lia 18

它定义NODE为类型的同义词struct node *,因此当您声明一个类型的变量时,NODE您实际上将声明一个指针struct node.

就个人而言,我认为这样的声明不是一个好主意:你是"隐藏指针"(这几乎总是一个坏主意),而且,你并没有以任何方式突出这个事实进入新名称.

  • +1"不要隐藏typedef后面的指针类型" (4认同)
  • 他的意思是,使用`typedef`你将使用一个指针类型(`struct node*`)而不会让那个首先读取你的代码的人明显(他们只看到`NODE`,并且可能认为它不是指针). (2认同)

Joe*_*oey 7

NODE为a 创建了一个typedef struct node *.

  • 更好的方法是省略typedef,并将指针类型称为`struct node*`. (3认同)

Kir*_*rov 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)
}
Run Code Online (Sandbox Code Playgroud)

是相同的

void f()
{
    // some code
    struct node* p = NULL;
    // do something with p
}
Run Code Online (Sandbox Code Playgroud)

使用NODE它只是缩短(无论如何,我不建议这样typedef,因为你隐藏,它是一个指针,而不是一个struct或其他类型,如@Matteo Italia的回答中提到的).


您所指的格式:"typedef struct {} type_name format"是其他内容.这是一种诀窍C,避免编写struct关键字(因为它是必须的C,而不是C++).所以

typedef struct node
{
    //..
} NODE;
Run Code Online (Sandbox Code Playgroud)

会为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.
}
Run Code Online (Sandbox Code Playgroud)

是相同的

void f()
{
    // some code
    struct node p;
    // do something with p
}
Run Code Online (Sandbox Code Playgroud)

请注意,现在,p不是指针,它是struct node.