Re: kurtze verständniss frage
26. Mär 2008, 22:55
Wie wäre es denn, wenn du das Tutorial verlinken würdest? Ich weiss nun überhaupt nicht wie der Buffer[] definiert ist.
Aber grundlegend. Ich nehme an, dass Buffer ein Array of Byte oder vllt. ein String ist. Wenn dem so ist, dann greifst du mit Buffer[1] auf ein Element zu. Bei der ersten Vermutung also auf ein Byte, bei der zweiten Vermutung auf ein Zeichen (char). Beides ist aber jeweils nur ein Byte gross und somit deutlich kleiner als der Code zuvor. Der sagt nämlich, gib mir die Adresse des ersten Zeichens ( @Buffer[1] ) und interpretiere das nun nicht als einen Zeiger auf ein Char (bzw. Byte), sondern interpretiere das als Zeiger auf einen Integer ( PInteger(@Buffer[1]) ). Und zum Schluss sagt er mit dem ^, dass er nicht den Zeiger haben will, sondern dass wodrauf er zeigt ( PInteger(@Buffer[1])^ ) (nennt sich dereferenzieren). Im Endeffekt macht er nichts anders, also Buffer[1], Buffer[2], Buffer[3] und Buffer[4] zusammen als ein Integer zu interpretieren, weil im Speicher kommen die alle linear hinter Buffer[1] und somit greift er durch den Integertyp (Integer = 4 Byte bei 32 Bit Compilern) auf alle 4 gleichzeitig zu und erhält somit den 4 Byte, anstatt nur das erste Byte.
Ein Zeiger referenziert eine Speicherstelle. Mit anderen Worten: ein Zeiger hat nur die Adresse, wo die Daten liegen. Das ist wie der Names deines Freundes. Du kannst dir überlegen mit wem du heute Abend was unternehmen willst. Wenn du dich entschieden hast, dann könntest du zwei Dinge tun:
1. Du schnappst dir deinen Freund und schleppst ihn den ganzen Tag mit dir mit, bis ihr dann abends weggeht, oder:
2. Du merkst dir einfach eine Referenz auf deinen Freund: Seinen Namen.
Letzteres ist deutlich einfacher und er kann noch was machen bis dahin. Ist bei Pointer fast ähnlich. Sie wissen nur die Adresse der Daten, die Daten aber liegen an der Adresse. Somit musst du dereferenzieren um zu sagen, du willst das haben, was an der Adresse steht an Daten und nicht die Adresse an sich.
Ich hoffe das war verständlich...
/EDIT: alles erklärte bleibt bestehen, ich habe nur gesehen, dass der Code nicht das Auslesen sondern das Zuweisen der Daten betrachtet hatte. Somit alles wie gehabt, nur die Datenverschiebung geschieht anders herum...
|