Unbekannter Variable Type in einer Struktur
-
Hallo,
ich möchte eine verkettete Liste erstellen. Diese soll eine Struktur verwalten die ein unbekannten Variable Type speichern soll.
Ich glaube ich mache das mit *void. Ist das in Ordnung. Kann ich das machen. Ich frage nur weil ich ein paar Übungen mache und mich noch mit C nicht gut auskenne. Danke.
-
Genau, und diesen void-Zeiger castest du dann bei Verwendung in deinen jeweiligen Datentyp.
-
@Hermann
kannste vielleicht mal n aussagekräftiges Beispiel machen?
thx a lot!
-
Herrmann schrieb:
Genau, und diesen void-Zeiger castest du dann bei Verwendung in deinen jeweiligen Datentyp.
Und woher will man dann wissen, von welchem Typ ein Listenelement ist?
Ich halte solch einen Ansatz für wenig sinnvoll. Container wie Listen, Stacks, Queues, etc.pp enthalten üblicherweise Elemente vom gleichen Typ. Und selbst wenn die gespeicherten Daten unterschiedlich sein können, fasst man das dann in einer einheitlichen Struktur zusammen, zB
typedef struct { int id; // welche Daten hab ich denn eigentlich char data[MAX_COUNT]; // die eigentlichen Daten } listen_element;
Ist natürlich nur eine Möglichkeit.
-
@/bin/bash0R, wird gemacht
... typedef struct structITEM ITEM; struct structITEM { ITEM *m_pPrev; ITEM *m_pNext; void *m_pData; }; ... ITEM item; // Wenn Integer int iValue = *(int*)item.m_pData; // Wenn Zeichen char cValue = *(char*)item.m_pData; ...
Das ganze kann man natürlich noch wie groovemaster bereits gesagt hat mit einer ID für den jeweiligen Dateninhalt versehen.
-
Sollte man sogar ;).
-
AJ schrieb:
Sollte man sogar ;).
so ungefähr:
typedef enum __type { INTEGER, DOUBLE, BYTE } TYPE; typedef struct __variant { TYPE type; union __value { int integer; double real; unsigned char byte; } value; } VARIANT; ... VARIANT v; v.type = INTEGER; v.value.integer = 100; ...
-
So könnte man es auch lösen.