... die programmiersprachen von heute sind eig allgemein so geschrieben, dass man sie mit einfachen englischkenntnissen direkt lesen kann ...
und ja ein pointer ist ein zeiger... wenn du dich jetzt fragst wozu ein zeiger gut ist, hier die antwort: er zeigt auf etwas.
die ziele auf die er zeigt, können alles mögliche sein... eine funktion, eine variable, ein array, eine adresse, einen wert, einen speicherbereich, oder was auch immer die programmierer von deinem target prozess sich einfallen lassen haben.
natürlich zeigen zeiger im speicher immer auf adressen. wichtig ist hierbei nur was sich hinter dieser adresse befindet...
stell dir vor du schickst einen brief an ein riesn unternehmen. dort soll dieser eine gewisse person erreichen. ist ja schön wenn du den brief an die dir bekannte adresse schickst. aber damit der brief wirklich da ankommt, wo er auch hin soll, musst du schon noch "zu händen ..." mit in den brief packen.
und so ist das auch mit pointern. es kommt selten vor, das ein pointer direkt auf eine andere adresse / einen anderen wert verweist.
meist zeigen pointer auf speicherbereiche in denen sehr viele daten stehen.
der pointer zeigt allerdings nur auf den anfangspunkt des speicherbereichs.
jetzt kommen die offsets (zu deutsch abstände) ins spiel.
um das ganze mal anschaulich zu machen hier ein kleines beispiel...
stell dir vor der pointer zeigt auf ein array von adressen (anderen pointern)
adressen sind (in der regel) 4 byte groß (zb 0xFF00FF00) das würde im code des programms dann etwa so aussehen:
Code:
int array[x] = [0x12345678, 0x87654321, 0x12348765, ....]
jetzt zeigt dein zeiger genau auf den anfang des arrays. du willst aber adresse nummer 3 haben, und weist jede adresse ist 4 byte lang...
wenn du dem pointer folgst bist du bei adresse nr1. wenn jetzt jetzt zur aktuellen adresse 4 addierst, bist du bei adresse nur 2. addierst du nochmals 4 bist du bei adresse nur 3.
==>ziel erreicht.
wir wissen also wir müssen zu unserer adresse auf die der pointer zeigt, das offset 8 addieren.
wie würde das noch programmiertechnisch aussehen?
Code:
; angenommen wir haben eine funktion lese($adresse) die uns den inhalt einer speicheradresse ausgiebt.
; zunächst läsen wir den pointer ein, der auf den speicherbereich zeigt.
$pointer = lese($pointer_adresse)
; jetzt haben wir in pointer unsere start adresse des array stehen.
; hierauf addieren wir 8, und lesen die von uns gesuchte adresse ein
$gesucht = lese($pointer + 8)
; in unserem beispiel würde nun in $gesucht 0x12348765 (in dezimal 305432421) stehen.
ob das eingelesene jetzt noch ein weiterer pointer ist, der auf einen weiteren pointer/wert/speicherbereich/... zeigt steht, ist ja hier nicht weiter wichtig.
diese schritte müsste man solange wiederholen, bis wir unser endgültiges ziel erreicht haben.