Zeiger ändern
-
Hallo,
ich habe mir ein kleines Programm gebastelt um mich ein wenig mit Zeigern zu beschäftigen.
Das Programm funktioniert bis auf eine Stelle scheinbar Problemlos.Ich wollte den Wert des Zeigers unabhängig von der Varibale auf die er zeigt ändern.
Also die Variable hat den Wert 5 und somit auch der Zeiger,
nun soll der Zeiger mit 10 addiert werden, ohne das der Wert der Variable sich ändert.Varibale = 5
Zeiger = 15Geht das überhaupt?
Hier der Code:
using namespace std; void funktion(int zahl, int *zeiger) { cout << "zahl: " << zahl << endl; cout << "&zahl: " << &zahl << endl; cout << "*zeiger: " << *zeiger << endl; cout << "zeiger: " << zeiger << endl; cout << "&zeiger: " << &zeiger << endl << endl; } int main() { int *zeiger, zahl = 1; zeiger = &zahl; funktion(zahl, zeiger); /*************************************************************************************************/ cout << "Anweisung: zahl = 2" << endl; zahl = 2; funktion(zahl, zeiger); /*************************************************************************************************/ cout << "Anweisung: *zeiger = 5" << endl; *zeiger = 5; funktion(zahl, zeiger); /*************************************************************************************************/ cout << "Anweisung: zeiger += 10" << endl; zeiger+=10; funktion(zahl, zeiger); return 0; }Viele Grüße
Tim0
-
Das ist undefiniertes Verhalten (Undefined behaviour - UB), da du dann beim Dereferenzieren in der 'funktion()' dann auf eine nicht von deinem Programm reservierte (d.h. ungültige) Speicheradresse zugreifst.
-
Tim0 schrieb:
Also die Variable hat den Wert 5 und somit auch der Zeiger,
Das halte ich für sehr unwahrscheinlich. Aber gut.

-
Du musst unterscheiden zwischem dem Zeiger (der eine Adresse enthält) und dem Wert auf den er zeigt.
Zudem ist die Variable zeiger in der Funktion eine andere als in
main. So wie zahl auch.
Beides sind in der Funktion lokale Variablen.
-
Danke für die Antworten, ich werde mich wohl noch ein wenig weiter einlesen müssen

Gruß
Tim0