Simon schrieb:
> dann ist *p selbst immer gleich groß.
Nicht *p, sondern p. p ist der Zeiger, *p ist das, worauf er zeigt.
Simon schrieb:
> und mit APP_CONFIG gebe ich vor um wieviel er weiterspringen muss?
Generell woraus die Variable besteht und wie darauf zugegriffen werden
muss. Auf Assembler-Ebene sind Zeiger in der Regel einfach Variablen,
die halt eine Adresse enthalten. Was an der Adresse dann steht (also
z.B. eine Zahl, ein Zeichen, eine weitere Adresse, eine Struktur, ...)
muß der Programmierer sich quasi merken und selbst dafür sorgen, daß er
den Wert an der Adresse nicht falsch interpretiert.
C ist dagegen eine typisierte Sprache, auch bei Zeigern, d.h. ein Zeiger
enthält die Adresse, hat aber auch bei der Definition einen Typ
bekommen, so daß der Compiler sich automatisch drum kümmern kann, den
Zugriff richtig zu machen. Wenn du also einen Zeiger auf int namens p
hast, dann ein *p machst, weiß der Compiler, daß er an der Adresse, auf
die p zeigt, einen int zu erwarten hat und daher genau einen solchen da
lesen muss.
Wenn nun eine Funktion sich nicht um die Datenstruktur kümmen, sondern
die übergebenen Daten einfach als Speicherblock irgendeiner Größe
interpretieren will, will sie einen Zeiger auf "bytes" haben, zusammen
mit der Größe des Speicherblocks. Das heißt aber, daß du an die Funktion
einen Zeiger auf einen anderen Typ übergibst, als sie eigentlich haben
will. Damit der Compiler damit glücklich ist, mußt du ihm daher sagen
"ja, ich weiß, daß der Typ anders ist, aber das ist in diesem Fall
richtig so", und genau das tust du mit dem Cast (BYTE*).