Pointer etc.
dummy
- programmiertechnik
0 Mathias Brodala1 hkl1 Bio0 Geholfen_Danke
hallo leute,
neben meine lieblingssprache PHP programmiere ich auch gerne VB und Basic (nur spielerein).
Aber in Tutorials und so kommen immer wieder folgende dinge vor:
-Eine Variable als Pointer definieren
-Gibt die Adresse einer Variable im Speicher zurück
Was hat das mit dem Pointer und so aufsich?
Was kann ich denn mit einer Speicheradresse anfangen?
Ich habe echt teilweise kein plan was das zu bedeuten hat.
Kann mir das einer mal für doofe erklären?
Ich danke euch!
Hallo dummy.
Was hat das mit dem Pointer und so aufsich?
Dazu: Zeiger, Pointer, C von A bis Z: Zeiger.
Kann mir das einer mal für doofe erklären?
Einen schönen Sonntag noch.
Gruß, Mathias
Hallo !
Was hat das mit dem Pointer und so auf sich?
Der Arbeitsspeicher ( RAM ) ist nichts weiter als eine Sammlung von Speicherstellen fuer Zahlen.
Also 1 MB RAM =>
ca. 1 Mio Zahlen a 8 Bit, also 0 < x < 256 oder -128 < x < 127
ca 1/2 Mio Zahlen a 16 Bit, also 0 < x < 65536 oder -32768 < x < 32767
ca 1/4 Mio Zahlen a 32 Bit ....
Einige dieser Speicherstellen enthalten Anweisungen fuer den Prozessor
z.B. Hex 0x90 => Dezimal 144 => (nop)"NO OP" => "Tue nichts"
Andere enthalten Daten z.B. die Zeichenkette "Hallo Welt" in ASCII - Verschluesselung
=> 48 65 6c 6c 6f 20 57 6f 72 6c 64 ( Hexadezimal, also Basis 16 )
=> 72 101 108 ... ( Dezimal )
Der Prozessor arbeitet, indem er Bereiche, die ihm beim Programmstart als
'Code' kenntlich gemacht wurden, von Anfang bis Ende abarbeitet.
Es schaut an der ersten Speicherstelle ( Nummer 0 ) nach was dort liegt und wie lang die Anweisung ist, holt sie, fuehrt sie aus und holt sich ide naechste Anweisung an der naechsten Speicherstelle usw.
Machmal ueberspringt er auch Speicherstellen, naemlich wenn er "jmp" irgendwo findet ( als Zahl natuerlich ). So funktionieren Schleifen, da springt der Prozessor rueckwaerts und fuehrt den gleichen Block nochmal aus, ggf. mit anderen Daten.
Ein Zeiger/Pointer ist die Adresse einer Speicherstelle fuer eine Zahl, die je nachdem entweder Daten ("Hallo Welt") oder Code bedeutet.
Diese Adresse ist natuerlich auch wieder eine Zahl ( meist 32 Bit gross => eine von ca 4 Milliarden ) und liegt oft wie irgendeine andere Groesse irgendwo im Arbeitsspeicher des Rechners* und hat dann ihrerseits auch eine Adresse.
/*
* BEGIN C - Code
*/
const char* p = "Hallo Welt";
/*
* END C - Code
*/
Gruss
Holger
*) Oder in einer Speicherstelle des Prozessors selbst - einem sog. Register
Sup!
Aaaaalso:
In einem Computer ist Speicher drin.
Der Speicher ist in viele viele Bytes aufgeteilt.
Jedes Byte hat eine Adresse - so wie z.B. ein Haus eine Hausnummer.
Im Speicher liegen Daten. Die Daten brauchen - je nach Typ (String, Zahl von 0 bis 255 oder -32768 bis 32767 oder...) verschieden viel Speicher, d.h. verschieden viele Bytes.
Die Adresse des ersten Bytes, dass ein Stück Daten (z.B. eine 16-Bit-Integer-Zahl) im Speicher belegt, ist die Adresse (z.B. die Adresse der 16-Bit-Integer-Zahl).
Programmiersprachen greifen auf Daten auf verschiedene Arten und Weisen zu. Im Endeffekt werden aber die Bezeichner irgendwie auf Adressen im Speicher abgebildet.
In der Programmiersprache C ist nun ein Zeiger auf etwas einfach eine Variable, die die Adresse eines Stücks Daten enthält.
Z.B. so:
int a = 12345; /* a ist 12345; a liegt irgendwo im Speicher - wo, bestimmt der Compiler - nehmen wir an, die Adresse ist 0xABCD*/
int *b = &a /* b enthält nun die Adresse von a, also 0xABCD; die Adresse von b bestimmt auch der Compiler, nehmen wir an, 0xABDD */
Typ int int* (Zeiger auf int)
Bezeichner: a b
Speicher: 0xABCD .... 0xABDD
Wert 12345 0xABCD
Nun kann man über b, den Zeiger auf a, auf a zugreifen.
Das nennt man auch indirekte Adressierung.
Zeiger kann man z.B. dazu verwenden, call by reference zu realisieren...
Gruesse,
Bio
Hallo ihr drei!
Danke für eure Hilfe, habe alles verstanden!
Danke!