array vom Typ void

plain C haben nettes feature - void-Typ, Pointer, die verwendet werden kann als Zeiger auf einen beliebigen Datentyp.
Aber, angenommen ich habe folgende struct:


struct token {
    int type;
    void *value;
};

denen Wert-Feld kann die Punkt-zu-char-array, oder int, oder etwas anderes.
Also, wenn die Zuweisung eine neue Instanz von diesem struct brauche ich:

1) Speicher für das struct;
2) Speicher für Wert und weisen Sie es auf dem Wert-Feld.

Meine Frage ist - gibt es Möglichkeiten, um zu erklären, "array vom Typ void", die gegossen werden Sie zu einer anderen Art wie der void-pointer?

Alles was ich will ist die Verwendung von "flexiblen Element Arrays" (siehe 6.7.2.1 der C99-standard) mit der Fähigkeit zum casting zu jedem Typ.

Etwas wie dieses:


struct token {
    int type;
    void value[];
};

struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;

Ich nehme an, deklarieren token->Wert als char-oder int-array und Umwandlung in den benötigten Typ später wird diese Arbeit zu tun, aber kann sehr verwirrend für jemanden, der gelesen wird dieser code später.

Doppel-Zeiger?
mit char[] ist in Ordnung imho, da sizeof(char) == 1 und du wirst nie überrascht. Vielleicht möchten Sie erwägen den Makros zum Zugriff p->value mit dem richtigen Typ.

InformationsquelleAutor S.J. | 2011-04-25

Schreibe einen Kommentar