Funktions Pointer
-
Hallo, ich experimentiere gerade mit Pointern herum aber anscheind mache ich da was falsch. Wenn die Funktion dual_ptr noch einen dritten Parameter hat dann liegen die Daten ja an etwas anderen Speicheradressen denke ich und es wird zufällig auf den Wert gezeigt denn ich an die Funktion übergeben habe.
Wie kann ich hier den Wert über einen doppelten Pointer (Pointer mit 2 Sternen) zurück geben ?
Wenn die Funktion nur einen Stern hat dann kriege ich es hin ohne Probleme.
[Nein ich will nicht den Pointer mit 1 Stern benutzen sondern den mit 2 es geht ja um den Lerneffekt. ]#include <iostream> using namespace std; int **dual_ptr( int *z, int var ) { z=&var; return &z; } int main(int argc, char* argv[]) { int **ptr = dual_ptr(0,3); cout << **ptr << endl; // Gibt aus 4199248 system("PAUSE"); return 0; } //---------------------------------------------------------------------------#include <iostream> using namespace std; int **dual_ptr( int *z, int var , int **ptrf ) { z=&var; return &z; } int main(int argc, char* argv[]) { int **ptr = dual_ptr(0,3,0); cout << **ptr << endl; // Gibt aus 3 system("PAUSE"); return 0; }
-
Das ist beides undefiniertes Verhalten, da du Zeiger auf lokale Variablen in einer Funktion zurück gibst und nach Beenden der Funktion diese dereferenzierst. Außerdem sehe ich nirgendwo einen Funktionszeiger, ich nehme mal an, dass du dich ungeschickt ausgedrückt hast und Zeiger allgemein meinst.
Da deine Funktion nichts sinnvolles macht, kann man es auch nicht korrigieren.Außerdem solltest du dir vielleicht erst einmal Referenzen angucken, das ist deutlich einfacher, dann verstehst du auch die Zeiger besser (und fragst dich, was das mit den Zeigern überhaupt soll :p ).
-
Also hätte man hier auch undefiniertes Verhalten weil int v; ja Lokal ist und nicht Global ist das richtig ?
Ich meine soetwas mal in einem Tutorial gesehen zu haben.#include <iostream> using namespace std; int *ptr_f( int v ) { return &v; } int main(int argc, char* argv[]) { int var; var = *ptr_f(8); cout<<var; system("PAUSE"); }Wie Pointer im allgemeinen funktionieren weiss ich.
z.b.int var = 8; Speicheradresse: 0x1
int *ptr = &var; ptr zeigt auf die Speicheradresse 0x1&var ist einen Referenz auf int *ptr;
-
Uhrzeiger schrieb:
&var ist einen Referenz auf int *ptr;
das & bedeuted in diesem fall nicht referenz sondern zugriff auf die addresse, eine "referenz" wird immer bei der typendeklaration angegeben.
-
Uhrzeiger schrieb:
Ich meine soetwas mal in einem Tutorial gesehen zu haben.
Dann war das eines der unzähligen Schrotttutorials, geschrieben von einem Anfänger, am besten noch ein J. Wolf-Schüler, der ein Anfangerbuch gelesen hat und sich jetzt für gut hält.
&var ist einen Referenz auf int *ptr;
Dieser Satz ist kompletter Unsinn.
-
Und ich dachte ich würde mich damit bereits damit etwas auskennen.
Ich hab noch ein Buch von Bjarne Stroustrup ich glaub da les ich mal Referenzen und Pointer Part. (Hatte ich nicht getan da ich dachte ich könnte es bereits...
)