Oliver Lehmann schrieb:
> wie komme ich in test() wieder auf das 1. Byte von Buffer?
Wenn du eine Pointer-Variable hast, dann benennst du durch die
Verwendung des Variablen-Namens alleine immer die Adresse auf die dieser
Pointer zeigt.
Buffer = Buffer + 2;
setzt also die Adresse um 2 Einheiten weiter. Der Zeiger zeigt danach
auf eine andere Stelle im Speicher.
Setzt du VOR den Namen der Pointer-Variablen einen *, dann bedeutet das
'Dereferenzieren'. D.h. gemeint ist dann nicht die Adresse, die in der
Pointer Variablen gespeichert ist, sondern der Wert, der im Speicher
unter dieser Adresse zu finden ist.
Graphisch veranschaulicht. Eine Pointer Variable zeige im Speicher auf
eine Speicherzelle, in der der Wert 5 abgelegt sei
+---+
Buffer | 3 |
+--------+ +---+
| o------------------->| 5 |
+--------+ +---+
| 9 |
+---+
'Buffer' alleine, wäre die Spezifikation für das Rechteck, über dem
'Buffer' steht. Damit wird also die Variable manipuliert, an der der
Pfeil seinen Ausgang nimmt. Tut man das, dann zeigt der Pfeil danach
woanders hin.
Buffer = Buffer + 1;
ist also die Anweisung, Buffer auf das nächste Element im Speicher
zeigen zu lassen
+---+
Buffer | 3 |
+--------+ +---+
| o-----------+ | 5 |
+--------+ | +---+
+------->| 9 |
+---+
'*Buffer' hingegen ist die Spezifikation, das man sich auf das Ende des
Pfeiles beziehen möchte. In diesem Fall eben die 5. Mittels *Buffer = 8;
schreibt man also an die Stelle, auf die Buffer zeigt (ausgedrückt durch
den *) eine 8
+---+
Buffer | 3 |
+--------+ +---+
| o------------------->| 8 |
+--------+ +---+
| 9 |
+---+
Und das ist eine vollkommen andere Operation.
Und jetzt überleg noch mal, was wohl
macht. Worauf bezieht sich dieses Statement? Auf den Zeiger selber, oder
auf das worauf er zeigt? Wo sind Dereferenzieungs-Sterne und wo nicht?
Wo wird daher der Pointer selbst manipuliert und wo das, worauf er
zeigt? Und wie deckt sich das mit dem, was du eigentlich tun willst?