Czy to możliwe?Wskaźnik do własnego typu w struct?
typedef struct {
listLink *next;
listLink *prev;
void *data;
} listLink;
Czy to możliwe?Wskaźnik do własnego typu w struct?
typedef struct {
listLink *next;
listLink *prev;
void *data;
} listLink;
Tak, z tym składniach
struct list {
int value;
struct list *next;
};
lub
typedef struct list
{
int value;
struct list *next;
} list;
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>
.
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;
};
Wiem, co to jest lista z krwawymi linkami: P –
Nie wydaje ci się kiedy pytasz tego rodzaju pytanie;) – Oleiade
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.
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. –
Powiązane: [typedef struct vs struct definition] (http://stackoverflow.com/questions/1675351/typedef-struct-vs-struct-definitions) – styfle