Hey,

Quote:
1. Frage: Warum benötigt man das "void"? Das int erscheint mir nach deiner Erklärung logisch, doch das "void" kann ich mir nicht erklären (was es bedeutet [Funktionstyp ohne Rückgabewert] weis ich einiger maßen), doch verstehe ich die Bedeutung in deinem Kontext nicht.

Generell sollte das void* unnötig sein, verdeutlicht aber den typecasting vorgang.
Für einen Compiler ist void ein synonym für "unbekannt". Das heißt das ein Zeiger auf "unbekannt" auf jeden beliebigen Datensatz, beliebiger Größe zeigen kann. Warum schreibe ich das hier dazu? Wenn du schreibst:
ent->skill[0] = (var)pointer;
Können bestimmte Compiler auf die Idee kommen zu sagen, dass das so wohl nicht stimmt. Weil: Ein Pointer ist erstmal kein var. Nun sucht der Compiler ob er einen Pointer in eine var automatisch umrechnen kann. Hier gibt es jetzt drei Ergebnismöglichkeiten:
1) Er erkennt, das var größe = pointer größe und schreibt den Pointer 1:1 in ent->skill[0] - gut!
2) Er kennt keine Regel um einen Pointer in eine var zu schreiben und gibt einen Syntaxfehler aus (in die Richtugn: No conversion defined between var and ENTITY*).
3) Er kennt eine Regel die aber falsch ist bzw. hier nicht passt und schreibt einen falschen Wert in ent->skill[0].

Um alle Probleme zu vermeiden typecaste ich hier zweimal (wie gesagt, vermutlich NICHT notwendig). Als erstes wird dem Compiler mitgeteilt, dass die ENTITY* Struktur in echt ein Pointer auf etwas unbekanntes ist (void*). Der Compiler "vergisst" also, was an der Stelle von ENTITY* hinzeigt überhaupt steht. Für den compiler ist das jetzt wirklich nur noch n Zeiger auf einen unbekannten Wert. Danach kommts zu einem typecast zu (int). Das akzeptiert der Compiler ganz sicher (und schreibt exakt die 4 bytes des pointers in die var), da er ja gar nicht weiß was (void*) eig ist.. daher kann er auch keine falschen Regeln anwenden bzw. motzen..


Zu deinem Code:
1) genau so wirds gemacht
2) fallengelassener_gegenstand->inventar_bild = "pct_item_testgegenstand.tga";
ist falsch.

Code:
fallengelassener_gegenstand->inventar_bild = bmap_create("pct_item_testgegenstand.tga");



ist richtig..