2010-12-17 12 views
5

Czy to możliwe?Wskaźnik do własnego typu w struct?

typedef struct { 
    listLink *next; 
    listLink *prev; 

    void *data; 
} listLink; 
+0

Początkowe zamieszanie, którego doświadcza tm1rbt, jest klasycznym argumentem dla konstrukcji NOT typu "nie pisząc". Pisanie "struct listLink" w kodzie klienta nie jest tak uciążliwe. Posiadanie typedef jest nieprzyzwoite i całkowicie niepotrzebne. –

+0

Powiązane: [typedef struct vs struct definition] (http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions) – styfle

Odpowiedz

6

Tak, z tym składniach

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

lub

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

Tak, ale typedef nie nastąpi dopiero później w oświadczeniu więc trzeba dać z siebie struct Nazwa. Na przykład.

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

    void *data; 
}; 

I można zawinąć w typedef że jeśli nie chcą zadeklarować każde wystąpienie jako struct listLink <whatever>.

0

To możliwe dzięki podanej składni. Dodatkowo nazywa się to połączoną listą: http://www.ehow.com/how_2056292_create-linked-list-c.html

Wybierz nazwę, a następnie wpisz ją za pomocą wpisanego tekstu. Każda połączona lista będzie wymagać struktury, nawet jeśli ma tylko jedną zmienną:

typedef struct product_data PRODUCT_DATA; 

Zdefiniuj strukturę. Ostatnim elementem powinien być wskaźnikiem do typu po prostu zdefiniowane, i nazwany „next”:

struct product_data { 
int product_code; 
int product_size; 
PRODUCT_DATA *next; 
}; 
+2

Wiem, co to jest lista z krwawymi linkami: P –

+0

Nie wydaje ci się kiedy pytasz tego rodzaju pytanie;) – Oleiade

0

wolę tę wersję:

typedef struct listLink listLink ; 

struct listLink{ 
    listLink *next; 
    listLink *prev; 

    void *data; 
} ; 

To wyraźnie oddziela struct zi członków i zmienne.

Używanie tej samej nazwy dla struct i typedef, struct listLink, listLink, nie stanowi problemu, ponieważ mają one oddzielne przestrzenie nazw.

Powiązane problemy