создание указателей Typedef на структуры Typedef в C - PullRequest
2 голосов
/ 19 декабря 2010

У вас есть вопрос о typedef в C.

Я определил структуру:

typedef struct Node {
    int data;
    struct Node *nextptr;
} nodes;

Как бы я создал typedef указатели на struct Узел ??

Спасибо!

Ответы [ 3 ]

12 голосов
/ 19 декабря 2010

Вы можете ввести их одновременно:

typedef struct Node {
    int data;
    struct Node *nextptr;
} node, *node_ptr;

Возможно, это трудно понять, но это во многом связано с тем, почему синтаксис объявления C работает так, как он работает (т.е. почему int* foo, bar; объявляет bar как int, а не int*

Или вы можете использовать существующий typedef:

typedef struct Node {
    int data;
    struct Node *nextptr;
} node;

typedef node* node_ptr;

Или вы можете сделать это с нуля, так же, как если бы вы печатали что-нибудь еще:

typedef struct Node* node_ptr;
3 голосов
/ 19 декабря 2010

На мой вкус, самый простой и понятный способ - сделать предварительные объявления struct и typedef для struct и указателя:

typedef struct node node;
typedef node * node_ptr;
struct node {
    int data;
    node_ptr nextptr;
};

Хотя я бы сказал, что мне не очень нравится указатель typedef.

Использование того же имени, что и теги typedef и struct в предварительном объявлении, упрощает работу и облегчает совместимость API с C ++.

Также вам следует уточнить имена ваших типов, независимо от того, представляют ли они один узел или набор узлов.

1 голос
/ 19 декабря 2010

Примерно так:

typedef nodes * your_type;

Или:

typedef struct Node * your_type;

Но я бы предпочел первое, поскольку вы уже определили тип для struct Node.

...