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.
就个人而言,我认为这样的声明不是一个好主意:你是"隐藏指针"(这几乎总是一个坏主意),而且,你并没有以任何方式突出这个事实进入新名称.
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.
| 归档时间: |
|
| 查看次数: |
16556 次 |
| 最近记录: |