Pointer-Problem
-
Hallo,
ich rätsle die ganze Zeit an einem Problem und verstehe aber noch nicht richtig warum es sich so verhält.
Die Frage ist, welche werte haben am Ende u, v und w? Lässt man sich es ausgeben, haben Sie die Ausgangswerte 7, 8 und 9.
Warum ist das so?
Am Anfang werden ja ganz normal int-Variablen erzeugt und mit den Werten 7, 8 und 9 belegt. Danach wird ein Array der Länge 3 vom Typ "Pointer auf ints" erzeugt. Jeder dieser 3 Pointer zeigt nun auf die Speicherstelle einer der am Anfang festgelegten Variablen. Nun erzeuge ich einen neuen Pointer vom Typ "int" namens p, der auf den ersten Index des Arrays zeigt, also an den Index "0". Nun wird er durch "++p" um einen Index nach rechts verschoben an die Arraystelle "1".Der von hier nachfolgende Wert wird um 1 erhöht(an Index 2 des Arrays).Anschließend zeigt der Pointer an den Index 2 des Arrays (durch p++).Wenn ich jetzt die Werte u, v und w ausgebe, werden die Anfangswerte ausgegeben, obwohl ich doch w auf 3 geändert habe!?!? Das verstehe ich nicht ganz.
Kann mir das jemand erklären, warum das so ist?Hier ist der Quell-Code:
int u=7, v=8, w=9; int* array[3]; array[0]=&u; array[1]=&v; array[2]=&w; int* p=array; ++p; p[1]=3; p++;Vielen Dank im Voraus!!
Viele Grüße!
-
Du hast nicht w geändert, sondern den Pointer im Array, der auf w zeigt.
Einfach am Anfang der Zeile 8 noch ein Sternchen davor schreiben.
-
Die Aufgabe lautet so:
Betrachten Sie folgende Quellcode-Zeilen:
int u=7, v=8, w=9; int* array[3]; array[0]=u; array[1]=v; array[2]=w; int* p=array; ++p; p[1]=3; p++;Falls Sie der Meinung sind, dass dieser Quellcode nicht kompiliert oder bei der Ausführung zu einem Programmabsturz führt, korrigieren Sie ihn (ohne die ersten beiden Zeilen zu verändern).
Fügen Sie außerdem noch eine Zeile hinzu, die p benutzt, um den (direkt oder indirekt) referenzierten intWert auszugeben. Welcher Wert wird ausgegeben?
Welche Werte haben u, v und w am Ende?Ich habe mir gedacht, dass man diese 3 Zeilen
array[0]=u; array[1]=v; array[2]=w;in
array[0]=&u; array[1]=&v; array[2]=&w;ändern muss. Jedoch kommt er mit der Zuweisung
int* p = array;auch nicht klar.
Ich komm einfach nicht weiter.
-
Vielleicht ist das gemeint:
int u=7, v=8, w=9; int* array[3]; array[0]=&u; array[1]=&v; array[2]=&w; int** p=array; ++p; *p[1]=3; p++;Das läßt sich aber nicht sicher sagen, weil es unzählig viele Lösungen gibt und die Aufgabe vollkommen praxisfern ist. Mein Beileid.
-
Dankeschön : )
Ja diese Lösung hab ich grad auch am Laufen. Ja die aufgabe ist echt etwas seltsam ; ) Trotzdem danke für eure Hilfe! Echt super!
Lg