Intereting Posts
Где хранятся локальные, глобальные, статические, автоматические, регистровые, внешние, константные, изменчивые переменные? Есть ли переносимый способ получить локальный системный часовой пояс в libical icaltimetype? Почему имя main для функции main () Может кто-нибудь, пожалуйста, скажите мне, как использовать утверждения прагмы Выделение массива символов типа struct * Инструкции по трассировке / профилированию Неопределенная ссылка на «pow», хотя -lm является флагом компиляции. C: Как передать двойной указатель на функцию Данные, записанные в файл с использованием glib Заказ сетевого байта в сокетах Абсурдное состояние в самой длинной растущей подпоследовательности Как найти n-мерное число в C Как объявить printf ()? В C, как мне записывать в конкретную ячейку памяти, например, видеопамять b800, в DOS (реальная DOS, MS DOS 6.22) c – Как проверить EOF при чтении () на FIFO

что указывает узел структуры typedef * NODE?

struct node { int coef; int exp; struct node *link; }; typedef struct node *NODE; 

Он определяет NODE как синоним типа struct node * , поэтому, когда вы будете объявлять переменную типа NODE вы фактически объявляете указатель на struct node .

Лично я не думаю, что такое объявление является хорошей идеей: вы «скрываете указатель» (это почти всегда плохая идея), и, более того, вы никоим образом не подчеркиваете этот факт в новом имени ,

Это делает NODE typedef для struct node * .

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 и NOT на 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 .

просто говорит, что вы можете создавать указатель типа узла, используя только NODE каждый раз, вместо того, чтобы называть узел struct * каждый раз

что указывает typedef struct node *NODE ?

ЭТО ОКАЗЫВАЕТ ЧЕЛОВЕК, КОТОРЫЙ НЕ УЗНАл, ЧТО ВЕРХНЕЙ ЧАСТИ НЕ ХОРОШО

Сохранять все идентификаторы UPPERCASE для MACROS .

Cheers & hth.,