Static vor Variablen

Gast #2365120
Lesenswert?

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?
#2365162
Lesenswert?

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.
#2365168
Lesenswert?

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 :-)
#2365209
Lesenswert?

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.
#2365222
Lesenswert?

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?
Gast #2365270
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren