2011-10-29 166 views
12
struct node 
{ 
    int coef; 

    int exp; 

    struct node *link; 
}; 

typedef struct node *NODE; 
+6

请不要隐藏真正的代码,但背后的typedef指针类型。 –

+2

味道不好。 SCNR – ninjalj

+0

什么是更好的方式来写这个代码。在书的结构中使用3到4种方式... – Skr

回答

7

它使得NODEstruct node *的typedef。

+1

什么是编写此代码的更好方法...保留相同的含义。 – Skr

+3

更好的方法是省略typedef,并将指针类型称为“struct node *”。 –

18

NODE定义为类型struct node *的代名词,所以当你将声明类型的变量NODE你会实际上宣告指针struct node。我个人并不认为这样的声明是一个好主意:你“隐藏了一个指针”(这几乎总是一个坏主意),而且,你也没有以任何方式强调这个事实变成新的名字。

+4

+1因为相同的原因,“不要将指针类型隐藏在typedef后面” –

+1

+1。命名它'nodeptr'而不是'node'会有所帮助,但是没有理由'typedef'。 –

+1

“不要将指针类型隐藏在typedef后面”这是什么意思? – Skr

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,因为你躲起来了,它是指针,而不是struct或其他类型,如@Matteo Italia的答案中所述)。


格式,你指的是:“typedef struct {} type_name format”是别的。这是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 
} 

注意,现在,p不是一个指针,它的struct node

+0

可以用不同的方式编写相同的代码。如何在typedef struct {} type_name中编写相同的代码;格式??? – Skr

+0

好吧,看看我的编辑,我希望它更清楚。 –

+0

非常感谢,我这次得到了。 – Skr

-3

typedef struct node *NODE表示什么?

它表明一个人如果没有学会大写没有好的

储备全部大写标识符。

干杯&心连心,

+0

另外,我不认为让'NODE'包含'*' –

+0

@彼得李:谢谢,我没有想到提及这一点。嗯,我发现好奇的是,最有回报的答案是*不回答关于这个“表示”的问题,而这个答案是解决问题的唯一答案,它被低估了。这就是SO。 –

+0

即使你非常坚实和酷。即使你有很好的案例提示。羞辱人是不是太好主意。 B.t.w.这个问题不是一个适当的答案。这是降低答案的主要原因。 – I159

0

简单地告诉你可以只使用节点的全部时间,而不是书面方式结构节点*每次创建节点类型的指针

相关问题