Указатель на собственный тип в структуре? - PullRequest
5 голосов
/ 17 декабря 2010

Возможно ли это?

typedef struct {
    listLink *next;
    listLink *prev;

    void *data;
} listLink;

Ответы [ 4 ]

6 голосов
/ 17 декабря 2010

Да, с этим синтаксисом

struct list {
    int   value;
    struct list  *next;
};

или

typedef struct list
{
      int value;
      struct list *next; 
} list;
3 голосов
/ 17 декабря 2010

Да, но определение типа не происходит до тех пор, пока в этом выражении не будет, поэтому вам нужно дать самой структуре имя.Например,

struct listLink {
    struct listLink *next;
    struct listLink *prev;

    void *data;
};

И вы можете заключить это в typedef, если не хотите объявлять каждый экземпляр как struct listLink <whatever>.

0 голосов
/ 16 ноября 2014

Я предпочитаю эту версию:

typedef struct listLink listLink ;

struct listLink{
    listLink *next;
    listLink *prev;

    void *data;
} ;

Он четко отделяет структуру от членов и переменных.

Использование одного и того же имени для struct и typedef, struct listLink, listLink, не является проблемой, поскольку они имеют отдельные пространства имен.

0 голосов
/ 17 декабря 2010

Это возможно с заданным синтаксисом. Кроме того, это называется связанным списком: http://www.ehow.com/how_2056292_create-linked-list-c.html

Выберите имя, затем используйте typedef, чтобы определить его. Каждому связанному списку потребуется структура, даже если он имеет только одну переменную:

typedef struct product_data PRODUCT_DATA;

Определить структуру. Последний элемент должен быть указателем на только что определенный вами тип с именем «next»:

struct product_data {
 int product_code;
 int product_size;
 PRODUCT_DATA *next;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...