PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Static int Problem



Spongebob85
19.01.2007, 21:48
Moin. Ich hab grade ein echtes Problem. Denk schon seit einiger zeit drüber nach, aber ich komme auf kein ergebniss. Erstmal das Programm:

#include <stdio.h>

int zaehlen ()
{
static int zahl=0;
zahl++;
return zahl;
}

main ()
{
int i, ergebnis;
for (i=1; i<=12; i++)
ergebnis = zaehlen();
printf ("\n'ergebniss' hat den Wert %i", ergebnis);
}

Es kommt die ausgabe " 'ergebniss' hat den Wert 12 "
Wenn ich statt "static int" einfach nur "int" nehme, kommt "1" als ergebniss raus. Das verstehe ich nicht. Ich weiß auch noch gar nicht so genau wie man mit static int umgeht. Kann mir das jemand erklähen?

Dankeschön schonmal.

izaseba
19.01.2007, 22:05
Das ist doch ganz einfach und in jedem C Buch beschrieben,

ohne static wird wie Variable jedesmal neu erzeugt um beim verlassen der Funktion zerstört.
Mit static behält sie ihren Wert und ist bei jedem Funktionsaufruf verfügbar.

Gruß Sebastian

bL1nK
19.01.2007, 22:39
static heisst das die variable statisch auf dem stack liegen bleibt.

vorzugsweise wirds sowas in ner ISR genutzt wenn ma die variable weiter benützen will. sie ist aber jedoch nur local benutzbar, sprich nur in der funktion oder auch in dem modul in der du sie als static definiert hast.

Spongebob85
19.01.2007, 22:40
Dachte ich auch, aber dann müsste dieses Prog hier ja auch gehen, so wie ich mir das gedacht hab:

#include <stdio.h>

int wert()
{
static int zahl=0;
return zahl;
}

main ()
{
int x, y;

printf ("\nZahl 1 eingeben:");
scanf ("%i", & x);
printf ("\nZahl 1 und wert sind: %i\n", x+wert() );
x+wert() = wert()

printf ("\nZahl 2 eingeben:");
scanf ("%i", & y);
printf ("Zahl 2 und wert sind: %i\n", y+wert() );
}

Ich wollte erreichen, das man eine Zahl eingibt, "wert()" diese Zahl dann annimmt und die 2. Zahl dann drauf addiert. Nur mal um zu sehen, das "wert()" die Zahl behält.
Kommt aber ne Fehlermeldung :-(

Spongebob85
19.01.2007, 23:25
Habs endlich begriffen. Man kann ja nicht "wert ()" eine Zahl zuweisen. "wert()" ist ja nur die funktion, die die Variable "zahl" endhält.
\:D/

Naja, manchmal dauerts bei mir halt ein bisschen länger.
Trotzdem danke!!!