Hallo Felix G
Danke für deine Rückmeldung auf das "void casting"
ich wollte jetzt nicht extra dafür einen neuen Thread aufmachen, deshalb frage ich gleich hier:
Warum sind die beiden folgenden Zeilen nicht equivalent ?
Wo liegt der Fehler, bzw. was habe ich noch nicht richtig verstanden ?
n = (unsigned char *) TestData; // Adresse setzen
n = &TestData; // oder so, geht auch
Ich habe mal folgendes ausprobiert und bekomme stets das gleiche Ergebnis. bzw. zeigt mein "void pointer n" nach jeder Zeile immer auf die gleiche Adresse.
unsigned char TestData[]={0x00,0x01,0x02,0x03};
void *n;
n = TestData;
n = &TestData;
n = (unsigned char*) TestData;
n = (unsigned int*) TestData;
n = (signed int*) TestData;
n = (int*) TestData;
Es wird lediglich der Zeiger n, welcher vom typ void* ist, auf die Adresse von TestData gesetzt. Die Typwandlung ist hier, wie Du schon sagtest nicht erforderlich, zudem ist ein void pointer generell zu jedem anderen Zeiger kompatibel. Das Entscheidende für mein Verständis waren die folgenden Zeilen: bzw. suchte ich nach einer Möglichkeit ++ bzw -- auf void pointer anzuwenden. Und dies war, logischerweise, nur mit einem entsprechenden casting möglich.
n = (unsigned char *) n+1; // Zeiger + 1 Byte
n = (unsigned short *) n+1; // Zeiger + 2 Bytes
n = (unsigned int *) n+1; // Zeiger + 4 Bytes
++p muss dann so:
n = (unsigned char *) n+1;
oder so:
++(*((char**)(&n)));
codiert werden, wenn es sich um ein Byte Zeiger handeln soll.
mfg. Siro
Lesezeichen