Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » lokale variablen unklarheit

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
04.11.2004, 18:30 Uhr
Lensflare



Hallo.

hab ein paar zeilen code in einem buch gefunden, mit denen ich nicht klar komme.

vereinfacht geschrieben sah es so aus:

C++:

int funktion()
{
  int a;
  a = 5;
  return a;
}

while(1)
{
  funktion();
}



Nun bereitet mir die tatsache sorgen, dass "funktion()" in einer
schleife aufgerufen wird.
in dieser funktion wird ja ne lokale variable erzeugt.
Weil sie lokal ist, ist sie dem rest des codes ja unbekannt.
Heisst das sie wird jedesmal gelöscht und dann wieder neu erzeugt?
Ich denke, dass der compiler erstmal den code nach allen variablen
durchsucht und speicherplatz für sie anlegt. Lieg ich da richtig?

Das würde heissen, dass der speicherplatz der variable nicht nach
dem verlassen der funktion freigegeben wird, oder?

Aber was passiert nun , wenn das programm mehrmals auf "int a;" trifft?
So wie im beispielcode.
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)

Dieser Post wurde am 04.11.2004 um 18:33 Uhr von Lensflare editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.11.2004, 18:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja es wird beim eintreten in die funktion speicher für a angelegt (4byte) und beim verlassen wieder gelöscht. und das ununterbrochen solange die schleife läuft. Wenn danach wieder ein int a; kommt, kann das dem compiler egal sein, da er ja int a; in speicheradressen umschreibt und nur mit diesen hantiert
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.11.2004, 18:48 Uhr
Mr. T



Hi!

Bin zwar auch noch nicht sooo bewandert, aber die Lebenszeit von lokalen Variablen beschränkt sich auf die Funktion, danach ist sie weg! Auf ewig. Der Speicher ist dann schon wieder frei. Also wird sie tatsächlich jedes mal neu definiert (deklariert wäre ohne Wertzuweisung, weil gleich Speicher belegt werden MUß, um den Wert 5 zu speichern) und anschließend gelöscht.

Globale Variablen und lokale Variablen hindern sich gegenseitig nicht, die Funktionen in denen die Variablen benutzt werden beziehen den Wert der Variablen aus der "lokalst möglichen" Variablen.

Hier trifft das Programm also nur einmal auf ein int a.
--
So ist das!

Dieser Post wurde am 04.11.2004 um 18:49 Uhr von Mr. T editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.11.2004, 18:49 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du meinst max 1x gleichzeitig auf ein int a;
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.11.2004, 18:53 Uhr
Mr. T



Yup, genau.

Ich meine Du meinst, ich würde meinen, es würde höchstens einmal die Variable gefunden werden können.
--
So ist das!

Dieser Post wurde am 04.11.2004 um 18:55 Uhr von Mr. T editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.11.2004, 19:06 Uhr
Lensflare



Sie wird tatsächlich jedes mal "gelöscht" und neu deklariert? Kostet das nicht zeit?
Das bremst doch mein programm ab, oder?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.11.2004, 19:13 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Sie wird tatsächlich jedes mal "gelöscht" und neu deklariert? Kostet das nicht zeit?
Das bremst doch mein programm ab, oder?


Ja
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.11.2004, 19:31 Uhr
Lensflare



Ich dachte ein Buch über das Programmieren mit C++ würde mir sinnvollen Code zum lernen bieten... so kann man sich anscheinend irren

was gibts denn für eine alternative, wenn man eine funktion in einer schleife hat und diese funktion variablen braucht? Globale variablen?
--
Wenn das Gehirn so einfach wäre, dass wir es verstehen könnten, wären wir so einfach, dass wir es nicht verstehen könnten.
(Emerson Pugh Trost)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.11.2004, 19:39 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


du kannst dein programm auch selber optimieren und in assembler schreiben

oder wenn du es in c machst kannst du auch alles in die mainfunktion kloppen...
funktionale trennung macht ein code handhabarer lesbarer und code wiederverwendbarer wartbarer usw...

wenn man bestimmte vorteile haben will muss man auch nachteile in kauf nehmen... da die kisten heute schnell genug sind spielen solche überlegen nur noch bei besonders rechenintesiven algorithmen eine rolle...

das beispiel in deinem fall ist nur zum verstehen in der praxis würde dafür vermutlich keiner keine eigene funktion schreiben bzw höchstens eine inlinefunktion (das ist eine die nicht wirklich ausgeführt wird sondern da wird der code einfach hinkopiert...


übringens es ist eigentlich immer so im leben das man für gewisse vorteile einen gewissen preis (nachteile) in kauf nehmen muss... Freibier gibts nicht
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 04.11.2004 um 19:43 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.11.2004, 20:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du meinst "Freibier gibts nicht ohne Suff danach" (Vorteil: Freibier, Nachteil: Suff)
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: