struct node
{
int coef;
int exp;
struct node *link;
};
typedef struct node *NODE;
Что указывает typedef struct node * NODE?
Ответ 1
Он определяет NODE
как синоним типа struct node *
, поэтому, когда вы будете объявлять переменную типа NODE
, вы будете фактически объявлять указатель на struct node
.
Лично я не думаю, что такое объявление является хорошей идеей: вы "скрываете указатель" (это почти всегда плохая идея), и, более того, вы никоим образом не подчеркиваете этот факт в новое имя.
Ответ 2
Он делает NODE
typedef для struct node *
.
Ответ 3
NODE
становится псевдонимом для struct node*
.
EDIT: Хорошо, для комментария (если я напишу свой ответ как комментарий, он будет слишком длинным и не отформатирован):
Нет никакого другого способа написать это. Здесь 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 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
указатель NOT, он struct node
.
Ответ 4
просто говорит, что вы можете создавать указатель типа node, используя только node каждый раз вместо того, чтобы писать struct node * everytime
Ответ 5
что указывает
typedef struct node *NODE
?
ИТ ОКАЗЫВАЕТ ЧЕЛОВЕК, КОТОРЫЙ НЕ УЗНАл, ЧТО ВЕРХНИЙ НЕТ ХОРОШЕЕ
зарезервировать идентификаторы ALL UPPERCASE для МАКРОС.
Приветствия и hth.,