Newsflash
Downloads
In der Download Section findet ihr Programme und andere Dinge zum downloaden.
 
Home arrow Programmierung arrow C++ arrow Pointer (Grundlagen)
Pointer (Grundlagen) PDF Drucken E-Mail
Geschrieben von Mitja Schmakeit   
Saturday, 6. October 2007
Die Funktionsweise von Pointern in C++ zu kennen ist sehr wichtig, vor allem beim Arbeiten mit Arrays und Objekten. Hier erkläre ich anhand eines Beispiels, wie Pointer grundsätzlich funktionieren und wozu sie da sind. Weitere Artikel zur behandlung von Pointern im zusammenhang mit Arrays und Objekten folgen. Pointer sind Grundsätzlich Referenzadressen zum Hauptspeicher, unter denen dann bestimmte (Variablen-)Werte gefunden werden können. Jede Variable die definiert wird, besitzt einen Pointer, der auf sie Zeigt. Um diesen Pointer herauszufinden, gibt es den Operator &:
Code:
int foo = 25; cout << "foo: " << foo << endl; cout << "&foo: " << &foo << endl;
Output:
foo: 25 &foo: 0x22ff74
Ändern wir den Inhalt einer Variable, so ändert sich ihr Pointer nicht:
Code:
int foo = 25; cout << "foo: " << foo << endl; cout << "&foo: " << &foo << endl; foo = 40; cout << "foo: " << foo << endl; cout << "&foo: " << &foo << endl;
Output:
foo: 25 &foo: 0x22ff74 foo: 40 &foo: 0x22ff74
Pointer lassen sich wiederum in Variablen speichern. Diese müssen je nachdem, auf was für einen Variablentypen sie referenzieren, deklariert werden. Zeigen sie auf eine Variable vom Typen int, so müssen sie deklariert werden per int *bar;. Mit dem sogenannten Dereferenzierungsoperator * können wir auf den Wert, der unter der gespeicherten Adresse liegt, zugreifen.
Code:
int foo = 25, *bar; bar = &foo; cout << "foo: " << foo << endl; cout << "&foo: " << &foo << endl; cout << "bar: " << bar << endl; cout << "*bar: " << *bar << endl;
Output:
foo: 25 &foo: 0x22ff74 bar: 0x22ff74 *bar: 25
Merke: Durch den Referenzierungsoperator & erhalten wir den Pointer (die Adresse) zum Wert; durch den Dereferenzierungsoperator * erhalten wir den Wert der unter dem Pointer (der Adresse) zu finden ist. Um das ganze nochmals zu verdeutlichen, ein weiteres Beispiel:
Code:
int foo = 25; cout << " foo: " << foo << endl; cout << " &foo: " << &foo << endl; cout << "*&foo: " << *&foo << endl;
Output:
foo: 25 &foo: 0x22ff74 *&foo: 25
Angenommen, wir möchten jetzt an die folgende Funktion eine Variable übergeben, und sie direkt von der Funktion ändern lassen, so übergeben wir einfach die Adresse (hier ein komplettes Programm):
Code:
#include <cstdlib> #include <iostream> using namespace std; void add5(int *blub) { *blub += 5; return; } int main(int argc, char *argv[]) { int foo = 25; cout << " foo: " << foo << endl; add5(&foo); cout << " foo: " << foo << endl; system("PAUSE"); return 0; }
Output:
foo: 25 foo: 30 Drücken Sie eine beliebige Taste . . .
Letzte Aktualisierung ( Sunday, 21. October 2007 )
 
< Zurück
Invalid XHTML (Valid XHTML destroyed by some components), Valid CSS - Design by ah-68 - Copyright © 2007 - 2012 by Mitja Schmakeit - Hosted by taruner.de