Dieses Programm demonstriert die Anwendung von Zeigern. Weiters werden auch wieder Variablen per Wert, Referenz und Zeiger an Funktionen übergeben.
/* Beispiel: Zeiger Filename:main.cpp Author:Lahmer Title:Verdeutlichung von Zeiger Description: Anhand dieses Beispiels werden Zeiger näher erläutert Last Change:16.01.2018 */ //Hedader-Dateien bzw. Bibliotheken #include <iostream> #include <conio.h> //Namespace using namespace std; //Funktionsprototyp int diff(int a, int b); //Parameterübergabe per Wert => Rückgabewert int, 2 int-Übergabeparameter void erhoehezahl(int &a); //Parameterübergabe per Referenz => Rückgabewert void (nichts), Variable i wird als Referenz übergeben void verringerezahl(int *b); //Parameterübergabe per Zeiger => Rückgabewert void (nichts), Variable b wird als Zeiger übergeben //Hauptprogramm int main(int argc, char** argv) { //Lokale Variablendeklaration int z1=99,z2=23; int erg=0; int *ptr; int *ptr2; //ptr2,ptr soll auf z2 zeigen: ptr2, ptr --> z2; int *ptr3; //ptrx soll auf z1 zeigen: ptrx --> z1 //Ausgabe der Speicheradressen der angelegten Variablen cout << "Adresse der Variable z1: " << &z1 << endl; cout << "Adresse der Variable z2: " << &z2 << endl; cout << "Adresse der Variable erg: " << &erg << endl; cout << "Adresse der Variable ptr: " << &ptr << endl; cout << "Adresse der Variable ptr2: " << &ptr2 << endl; cout << "Adresse der Variable ptr3: " << &ptr3 << endl; cout << endl << endl; //Die Adresse von der Variable z2 wird in die Variable ptr gespeichert ptr=&z2; //Der Inhalt von ptr (also die Adresse von z2) wird in die Variable ptr2 gespeichert ptr2=ptr; //Die Adresse von z1 wird in die Variable ptr3 gespeichert ptr3=&z1; cout << "Pointer1: " << endl; cout << &ptr << endl; //Ausgabe der Adresse der Variable ptr cout << ptr << endl; //Ausgabe des Inhalts von ptr (also die Adresse von z2) cout << *ptr << endl; //Ausgabe des Inhalts von der in ptr gespeicherten Adresse (also der Inhalt von z2) cout << "Pointer2: " << endl; cout << &ptr2 << endl; //Ausgabe der Adresse der Variable ptr2 (also die Adresse von ptr2) cout << ptr2 << endl; //Ausgabe der Variable ptr2 (also die Adresse von z2) cout << *ptr2 << endl << endl; //Ausgabe des Inhalts an der gespeicherten Adresse in ptr2 (also der Inhalt von z2) cout << "Pointer3: " << endl; cout << &ptr3 << endl; //Ausgabe der Adresse der Variable ptr3 cout << ptr3 << endl; //Ausgabe der Variable ptr3 (also die Adresse von z1) cout << *ptr3 << endl << endl; //Ausgabe des Inhalts an der gespeicherten Adresse in ptr3 (also der Inhalt von z1) cout << "#######################" << endl; //Funktionsaufrufe //Die Variablen z1 und z2 werden per Wert übergeben (=Kopie im Speicher) erg=diff(z1,z2); cout << erg << endl; //Die Variable z1 wird per Referenz übergeben, d.h. eine neue zweite Variable in der Funktion erhoehezahl() zeigt auf denselben Speicherplatz von z1 erhoehezahl(z1); cout << z1 << endl; //Die Variable z2 wird per Zeiger übergeben, d.h. die Adresse von z2 wird an die Funktion verringerezahl() übergeben, die Variable b in der Funktion enthält dann die Adresse von z2 verringerezahl(&z2); cout << z2 << endl; *ptr = *ptr*10; //Der Inhalt an der gespeicherten Adresse in ptr (also z2) wird mit 10 multipliziert und an den Inhalt der in ptr gespeicherten Adresse (also z2) geschrieben *ptr3 = *ptr2; //Der Inhalt an der gespeicherten Adresse in ptr2 (also z2) wird über den Inhalt an der gespeicherten Adresse in ptr3 geschrieben cout << endl << endl; cout << "Inhalt der Variable z1: " << z1 << endl; cout << "Inhalt der Variable z2: " << z2 << endl; //Rückgabewert = 0 return 0; } //Funktionsdefinition int diff(int a, int b) { //Rückgabe der Differenz a-b return a-b; } void erhoehezahl(int &a) { //Die Variable a wird um 1 erhöht, Aufgrund der Übergabe der Referenz wird auch gleichzeitig die Variable z1 im Hauptprogramm erhöht a++; } void verringerezahl(int *b) { //Der Inhalt der in der Variable b gespeicherten Adresse wird um 1 verringert (d.h. z2 wird verringert) --*b; //Der Inhalt der in der Variable b gespeicherten Adresse wird um 1 verringert (d.h. z2 wird verringert) (*b)--; //Der Inhalt der in der Variable b gespeicherten Adresse wird um 1 verringert (d.h. z2 wird verringert) *b-=1; }
| Variable | Adresse | Inhalt |
|---|---|---|
| z1 | 0x9ffe3c | 99 → 100 → 200 |
| z2 | 0x9ffe38 | 23 → 22 → 21 → 20 → 200 |
| erg | 0x9ffe34 | 0 → 76 |
| ptr | 0x9ffe28 | 0x9ffe38 |
| ptr2 | 0x9ffe20 | 0x9ffe38 |
| ptr3 | 0x9ffe18 | 0x9ffe3c |
Adresse der Variable z1: 0x9ffe3c Adresse der Variable z2: 0x9ffe38 Adresse der Variable erg: 0x9ffe34 Adresse der Variable ptr: 0x9ffe28 Adresse der Variable ptr2: 0x9ffe20 Adresse der Variable ptr3: 0x9ffe18 Pointer1: 0x9ffe28 0x9ffe38 23 Pointer2: 0x9ffe20 0x9ffe38 23 Pointer3: 0x9ffe18 0x9ffe3c 99 ####################### 76 100 20 Inhalt der Variable z1: 200 Inhalt der Variable z2: 200 -------------------------------- Process exited after 0.07103 seconds with return value 0 Drücken Sie eine beliebige Taste . . .