Подтвердить что ты не робот

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

struct node
{
    int coef;

    int exp;

    struct node *link;
};

typedef struct node *NODE;
4b9b3361

Ответ 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.,