Quote:
|
Wieso sie dort stehen und wie ich herrausfinde warum dort BYTE hinkommt und nicht FLOAT.
|
Kommt darauf an, wieviele Speicherzellen du "ansprechen" möchtest. Das wiederum hängt mit dem Speicherbedarf von int, char,... ab. Siehe:
Quote:
char = 1 Byte
int = 4 Byte
float = 4 Byte
double = 8 Byte
|
Quelle:
[Only registered and activated users can see links. Click Here To Register...]
Obwohl der Speicherbedarf je nach Compiler etwas schwanken kann. Dabei wird aber immer eine Minimale-Größe eingehalten, die im Standard festgelegt wurde.
Der Zeiger selber hat keine Ahnung, wie groß der Speicher ist, auf den er zeigt. Er weiß nur, wie groß ein Element ist, was durch den Datentyp des Zeigers festgelegt wird. D.h. ein Element eines Zeigers vom Typ BYTE ist ein Byte groß. Ein Element eines Zeigers vom Typ int ist 4Bytes groß:
Code:
int* pInt = new int[5]; //pInt zeigt auf eine Speicherfolge von Integer-Werten, Gesamtspeicherbedarf: 5*4 = 20
int element1 = pInt[0]; //Erstes Element = 4Bytes groß; Speicherzellen 0-3
Über einen Integer-Zeiger hast du also immer nur Zugriff auf 4Speicherzellen. Das heißt folgendes:
Code:
int* pInt = new int[5];
int i1 = pInt[0]; //Speicherzellen 0-3
int i2 = pInt[1]; //Speicherzellen 4-7
...
Wie du siehst hast du nie direkten Zugrif auf eine einzelne Speicherzelle zum Beispiel Speicherzelle 2. Wenn du eine einzelne Zelle ansprechen möchtest, hilft nur ein unsigned char*-Zeiger (Entspricht BYTE):
Code:
int* pInt = new int[5];
BYTE* pByte = pInt+1;
BYTE speicherzelle2 = pByte[0];
Woher du weißt, welchen Zeiger-Typ du verwenden musst? Das erschließt sich aus dem, was du tun willst. WIllst du zum Beispiel einzelne Op-Codes ändern, nimmst du natürlich einen BYTE-Zeiger, weil die op-Codes genau 1Byte groß sind (0x0-0xFF) und damit genau in einer Speicherzelle Platz finden. Willst du Adressen ändern, auf die Pointer zeigen, dann verwendest du natürlich unsigned int (DWORD), weil eine Adresse (bei 32bit) genau 4Bytes groß ist. Usw.
Wer Fehler findet, darf verbessern.
Quote:
|
Weil ADR_XXXXXX scheinbar ein BYTE* ist.
|
Q:Warum ist der Ball rot?
A:Weil der Ball scheinbar rot ist. :facepalm: