Zeiger (Pointer)
(EN google-translate)
(PL google-translate)
Es empfiehlt sich sehr vorsichtig mit Zeigern um zugehen, weil schnell Speicherzugriffsfehler entstehen können, die ein Programm abstürzen lassen können.
- Auch um besser verstehen zu können, was eine Variable ist, lohnt es sich, sich mit Zeigern (Pointern) zu beschäftigen.
- Wenn eine Variable deklariert wird, wird im Arbeitsspeicher ein entsprechender Platz reserviert.
- Bei modernen Rechnern sind das beispielsweise vier Byte, wenn es sich um eine Integer-Variable handelt.
|
- Zeiger (Pointer) sind ein eigener Datentyp in C/C++.
- Eine Zeigervariable kann die Speicheradresse einer Variable enthalten.
- Einen Zeiger mit dem Bezeichner y, der auf eine Adresse einer Integer-Varibalen zeigt, kann so deklariert werden: int *y;
- Es ist möglich, einem Zeiger die Adresse einer existierenden Variable zuzuweisen:
|
Bild 0-1: Zuweisen der Adresse der Integer-Variablen x an eine Zeigervariable y.
- *y ermöglicht auf den wert zuzugreifen, der an der in y gespeicherten Adresse liegt.
- Umgekehrt ermöglicht &x den Zugriff die Adresse, an der die Variable x gespeichert ist.
|
#include<iostream>
using namespace std;
int main(void)
{
int x;
int *y;
x=5;
y=&x;
cout<<"Wert von x="<<x<<endl;
cout<<"Adresse von &x="<<&x<<endl;
cout<<"Adresse von y="<<y<<endl;
cout<<"Wert an der Adresse von *y="<<*y<<endl;
}
Code 0-1: Das Ganze als Programm.
Bild 0-2: Terminal-Ausgabe zum obigen Programm.
- Alternativ kann man aber nicht die Adresse einer normalen Variable z auf die einer anderen Variablen "umbiegen".
- Das folgende an sich logisch aufgebaute Programm führt zu einem Compilerfehler, weil es nicht zulässig ist, der Adresse einer Variablen eine Zuweisung zu machen:
|
#include<iostream>
using namespace std;
int main(void)
{
int x;
int z;
x=5;
&z=&x; //UNZULÄSSIG
cout<<"Wert von x="<<x<<endl;
cout<<"Adresse von &x="<<&x<<endl;
cout<<"Wert von z="<<z<<endl;
cout<<"Adresse von &z="<<&z<<endl;
}
Code 0-2: FÜHRT ZU COMPILER-FEHLER!