kramann.info
© Guido Kramann

Login: Passwort:










Informatik3
1 Vom_struct_zur_Klasse
..1.1 Vom_struct_zur_Klasse
..1.2 struct_Programm
..1.3 Klassen_Programm
..1.4 Offene_Fragen
..1.5 Historie
..1.6 Objektabstraktion
..1.7 OO_Kundenverwaltung
..1.8 Objektfaehigkeiten
..1.9 Formatierung
..1.10 Motivation
..1.11 Uebung1
..1.12 Uebung2
2 UML
..2.1 Volumenberechnung
..2.2 UML_Klassendiagramm
..2.3 Konstruktor
..2.4 Statische_Variable
3 Strings
..3.1 Klassenbibliotheken
..3.2 stringUML
..3.3 Uebung3
4 Initialisierungen
4 bluej
5 Zeiger_und_Arrays
..5.1 Zeiger
..5.2 Zeiger_und_Funktion
..5.3 Uebung4
6 Vererbung
..6.1 MesswerteUML
..6.2 MesswerteProgramm
..6.3 VererbungsProgramm
..6.4 Vector
..6.5 Uebung
7 Modifikatoren
..7.1 public_Vererbung
..7.2 protected_Vererbung
8 Listen_und_Templates
..8.1 Containertypen
....8.1.1 ListeUML
....8.1.2 ListeProgramm
..8.2 Templates
....8.2.1 Listentemplate
....8.2.2 STLvectorTemplate
..8.3 Uebung5
..8.4 Uebung6
..8.5 Uebung7
9 Java
..9.1 Uebung
..9.2 GettingStarted
..9.3 Animation
..9.4 Hybrid
..9.5 Threads
10 Delegation
11 LayoutProjekt
12 Fenster
13 Uebung
14 Zwischenprojekt
..14.1 Befehle
..14.2 Planung
..14.3 JNI
..14.4 JNIumsetzen
..14.5 Anwendungsklasse
..14.6 GUI01
..14.7 GUI02
15 Rasterlayout
..15.1 Bilder_Packages
..15.2 interfaces
..15.3 ArrayList
..15.4 clone
..15.5 Uebung
16 Nuetzliches
..16.1 Threads
..16.2 Animation
..16.3 RungeKutta
..16.4 Loesungsansatz
..16.5 Internetprogrammierung
....16.5.1 Codegenerierung
....16.5.2 PHP_Programmierung
....16.5.3 PHP_OOP
....16.5.4 Java
17 Algorithmen
..17.1 RungeKutta
..17.2 Loesungsansatz
..17.3 Evoopt
..17.4 Uebung12
..17.5 Uebung8_2014
..17.6 Ausdruecke
18 Uebung10
19 UML_ALT
..19.1 Flaechenberechnung
..19.2 UML_Flaechenberechnung
..19.3 Implementierung
..19.4 ListeUML
..19.5 ListenImplementierung
..19.6 Anwendung

5.1 Zeiger

In C haben Sie einfache Datentypen, wie int, double, char kennengelernt, aber auch Arrays, auf deren Elemente mittels eines Zeigers (Pointers) zugegriffen werden kann.

Man kann mehrere Pointer definieren, die alle auf die gleiche Speicherstelle zeigen.

Zeiger verweisen auf Dinge, sind aber nicht selbst diese Dinge.

Sollen Objekte in einer Funktion verarbeitet werden, so können Zeiger auf diese Objekte der Funktion übergeben werden. Dadurch kann man die übergebenen Objekte verändern.

Will man innerhalb einer soclchen Funktion wieder auf Methoden und Attribute des Objekts, das hinter der Zeigervariable steht zugreifen, so geht das entweder mit dem Stern-Operator:

(*objektzeiger).eineMethode()

Eine andere, äquivalente Möglichkeit stellt die Verwendung des Pfeiloperators dar. Sie ist in der Regel weniger umständlich und der anderen Schreibweise vorzuziehen:

objektzeiger->eineMethode()
#include<iostream>
#include<math.h>

using namespace std;

class Kreis
{
    private:
        double radius;
    public:
        Kreis(double r)
        {
            radius = r;
        }
        double getFlaeche()
        {
            return M_PI*radius*radius;
        }
};

int main(void)
{
    Kreis* k1 = new Kreis(2.0);
    Kreis* k2;

    k2 = k1;    

    cout<<"r1="<<(*k1).getFlaeche()<<endl;
    cout<<"r1="<<(*k2).getFlaeche()<<endl;
    cout<<"r1="<<k1->getFlaeche()<<endl;
    cout<<"r1="<<k2->getFlaeche()<<endl;

    return 0;
} 

Code 5.1-1: Zeiger in der Objektorientierten Programmierung: k1 und k2 sind unterschiedliche Bezeichner, aber zeigen auf das gleiche Objekt.