在struct中指向自己的类型?

时间:2010-12-17 12:07:42

标签: c

有可能吗?

typedef struct {
    listLink *next;
    listLink *prev;

    void *data;
} listLink;

4 个答案:

答案 0 :(得分:6)

是的,使用此语法

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

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

答案 1 :(得分:3)

是的,但是typedef直到语句的后面才会发生,所以你需要给struct本身一个名字。 E.g。

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

    void *data;
};

如果您不想将每个实例声明为struct listLink <whatever>,则可以将其包装在typedef中。

答案 2 :(得分:0)

这可能与os osxx给定语法。另外,这称为链接列表: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;
};

答案 3 :(得分:0)

我更喜欢这个版本:

typedef struct listLink listLink ;

struct listLink{
    listLink *next;
    listLink *prev;

    void *data;
} ;

它清楚地将结构与成员和变量分开。

对struct和typedef struct listLink, listLink使用相同的名称不是问题,因为它们具有单独的名称空间。