Hallo, static int c = 2; // Modulglobal void Funktion1(void) { static int a = 5; int b = 3; a++; b++; c++; Funktion2(&a); // sollte OK sein! oder? (Das möchte ich wissen.) Funktion2(&c); // Ist OK! Funktion2(&b); // Ist bedingt OK. // Sobald Funktion1 beendet, darf nicht mehr auf die // an Funktion2 übergebene Adresse zugegriffen werden. // Besser nicht machen. } void Funktion2(int *p) { } Seht ihr das auch so?
Fragenix schrieb: > Funktion2(&a); // sollte OK sein! oder? (Das möchte ich wissen.) ja ist ok ! hätte ich auch so gesehen.
Dumme Frage, worin besteht der Unterschied zu:
1 | Funktion2(eine der Variablen); |
und der obigen Pointervariante? Knut
Mit Funktion2(&a); wir die Adresse der Variable a als Parameter an die Funktion Funktion2 übergeben. Funktion2(a); Übergibt den Wert der Vaiable als Kopie. Stichwort: call by value und call by reference. Hast du das gemeint ?
Knut schrieb: > Dumme Frage, worin besteht der Unterschied zu: > >
1 | > Funktion2(eine der Variablen); |
2 | >
|
> > und der obigen Pointervariante? > In dem einen Fall gibst du dem Zöllner eine Kopie deines Reisepasses. Wenn der dann darin rummalt, verändert er nur die Kopie und nicht das Original. Im anderen Fall gibst du ihm die Information, wo dein Reisepass steckt (in der Jackentasche). Wenn er dann mithilfe dieser Information den Reisepass ausfindig macht und darin herummalt, verändert er das Original.
Karl Heinz Buchegger schrieb: > In dem einen Fall gibst du dem Zöllner eine Kopie deines Reisepasses. > Wenn der dann darin rummalt, verändert er nur die Kopie und nicht das > Original. > > Im anderen Fall gibst du ihm die Information, wo dein Reisepass steckt > (in der Jackentasche). Wenn er dann mithilfe dieser Information den > Reisepass ausfindig macht und darin herummalt, verändert er das > Original. Netter Vergleich muss ich mir merken :-)
Geht noch weiter (wie ich gerade merke) Die Information wo der Reisepass steckt bekommt der Zöllner in Form eines Zettels auf dem stehe: "Der Reisepass ist in der Jackentasche" Der Zöllner behält sich den Zettel 2 Wochen später kommst du wieder zur Grenze und der Zöllner sieht auf den Zettel: Aha, der Reisepass ist in der Jackentasche. Dummerweise hast du aber eine andere Jacke an und dort steckt der Pass in der Brusttasche. Das weiß aber der Zöllner nicht, der vertraut dem Zettel den du ihm früher mal gegeben hast blind. Und da er den Pass daher logischerweise nicht in der Jackentasche finden wird, gibst vom Zoll eines auf die Mütze.
Fragenix schrieb: > Funktion2(&a); // sollte OK sein! oder? (Das möchte ich wissen.) ja > Funktion2(&c); // Ist OK! ja > Funktion2(&b); // Ist bedingt OK. > // Sobald Funktion1 beendet, darf nicht mehr auf die > // an Funktion2 übergebene Adresse zugegriffen > werden. > // Besser nicht machen. stimmt, ist aber trotzdem ok, da Funktion1 ja nicht beendet wird solange Funktion2 noch läuft. Michael Rathmair schrieb: > Funktion2(a); > Übergibt den Wert der Vaiable als Kopie. > Stichwort: call by value und call by reference. Frage am Rande, macht C eigentlich nicht in dem Fall u.U. auch implizit ein call by ref wenn Funktion2 wie hier einen pointer erwartet?
Mathias A. schrieb: > Frage am Rande, macht C eigentlich nicht in dem Fall u.U. auch implizit > ein call by ref wenn Funktion2 wie hier einen pointer erwartet? Ja. Der Pointer wird natürlich 'per value' übergeben. Aber im Endeffekt läuft es für den Wert auf den der Pointer zeigt auf einen Call by Reference hinaus.
Karl Heinz Buchegger schrieb: > Dummerweise hast du aber eine andere Jacke an und dort steckt der Pass > in der Brusttasche. Das weiß aber der Zöllner nicht, der vertraut dem > Zettel den du ihm früher mal gegeben hast blind. > > Und da er den Pass daher logischerweise nicht in der Jackentasche finden > wird, gibst vom Zoll eines auf die Mütze. Neinneinnein. Um die Analogie richtig weiterzuspinnen, müsste es heißen: Da der Zöllner streng nach Vorschrift arbeitet, fasst er in Deine Jackentasche, holt heraus was sich dort drin befindet und malt drin herum. Wenn Du das Zeug in Deiner Jackentasche nicht mehr brauchst, hast Du "nur" dir Arbeit des Zöllners verloren. Aber vielleicht steckte in Deiner Jackentasche diesmal die Adresse, zu der Du fahren wolltest (= eine andere Variable oder Funktion). Und da auch Du blind vertraust, dass die Angaben in Deiner Jackentasche immer so sind, wie Du sie hineingesteckt hast, nimmst Du die Zoll-Einträge jetzt als Wegbeschreibung. Und jetzt kommt es zu unvorhersehbarem Verhalten bis hin zu Unfällen mit Todesfolge.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.