variablen neu initialisieren
-
hiho leute!
Gibt es vielleicht eine Möglichkeit, alle Variablen wieder auf ihren Ursprungswert zurückzusetzen?
Beispielsweise hab ich ein Programm, dass diverse Arrays und Variablen verändert, dannach wird es erneut ausgeführt, aber nicht vorher beendet....also müssen alle variablen wieder zurückgesetzt werden.Muss ich das jetzt von Hand machen oder geht das auch mittels eines Befehls?
-
Einen speziellen Befehl dafür gibt es leider nicht. Das mußt du dann schon von Hand machen.
-
Hallo
also einen festen Befehl, unabhängig von Typ, gibt es dafür nicht. Schreib dir doch eine Funktion Init(), in der du alle Variablen auf einen von dir festgelegten Wert gesetzt wird. Diese Funktion führst du jedesmal (auch beim Start des Programms) aus.
bis bald
akari
-
vielen dank, nur ist das alles auch ein bischen umständlich bei arrays, da man ja mit for schleifen diese zurücksetzen muss...das plustert den programmcode ja nur unnötigt auf
-
snake4ever schrieb:
vielen dank, nur ist das alles auch ein bischen umständlich bei arrays, da man ja mit for schleifen diese zurücksetzen muss...das plustert den programmcode ja nur unnötigt auf
Nicht mehr als es die jetzige Initialisierung macht. Die einfachste Möglichkeit ist deshalb immer noch mit einer init() Funktion zu arbeiten. Wenn du irgendwann mal richtig C++ programmierst, gibt es für sowas überhaupt keine Notwendigkeit mehr, da man Variablen dort instanziert, wo sie gebraucht werden.
-
wie jetzt? meinst du dynamisch?
im jetzigen Code initialisiere ich sie ja dort wo sie gebraucht werden, jedoch haben sie beim erneuten Durchlauf auch noch vorhandene Werte und das will ich nicht.
-
snake4ever schrieb:
wie jetzt? meinst du dynamisch?
Nein.
snake4ever schrieb:
im jetzigen Code initialisiere ich sie ja dort wo sie gebraucht werden, jedoch haben sie beim erneuten Durchlauf auch noch vorhandene Werte und das will ich nicht.
Initialisierung ist was anderes als Wertzuweisung.
siehe hierzu auch RAII
Wenn du deine Variablen dort instanzierst wo du sie brauchst, dann werden sie ja auch dort jedes mal neu initialisiert und haben damit bei jedem "Durchlauf" den entsprechenden Anfangswert und nicht irgendwas altes.
-
axo, das wusste ich nicht...
char w[100];
initialisiert also bei jedem durchlauf einen komplett neuen array
edit: obiges trifft nicht zu, habs ausprobiert....wie meinst du das jetzt genau?
-
Hier initialisierst du ja auch nix. Du reservierst lediglich 100 Zeichen. Dh in deinem Array steht irgendwas undefiniertes drinne. Woher bekommen denn die Elemente gültige Werte?
-
ansonsten kannst du auch memset benutzen (war das bs spezifisch ? )
-
Delryn schrieb:
ansonsten kannst du auch memset benutzen (war das bs spezifisch ? )
memset ist zwar Standard, für sowas aber zu limitiert. Was ist zB, wenn du ein float Array mit dem Wert 1 initialisieren willst? Dann sollte man doch eher auf Funktionen aus <algorithm> zurückgreifen.
-
memset ist eine nette Idee, wie wendet man das genau auf den array an? belegt jedes element einen byte?
-
Jedes Element belegt sizeof(Type) Byte.
-
Die memset-Idee ist genial...viel effizienter und schöner
-
MaSTaH schrieb:
Jedes Element belegt sizeof(Type) Byte.
Aber nur, wenn sizeof(Type) gleich 1 ist.
-
Wie hilft memset denn hier?! o_O
Wenn du in einer Funktion "char mem[100]" verwendest, weißt du nie, nicht einmal beim ersten Mal, was drin steckt. Also hättest du memset schon vorher brauchen müssen, damit es jetzt hilft. Wenn du ein Array willst, das bei jeder Konstruktion mit Nullen gefüllt ist, nimm "char mem[100] = { 0 }".
-
ah mem[100] = { 0 } setzt also alle Elemente auf 0, hab das immer mittels schleifen gemacht und da war halt memset ne erleichterung.
der befehl tut ja im grunde das gleiche wie memset, aber ist gut zu wissen, dass es ihn gibt
-
snake4ever schrieb:
der befehl tut ja im grunde das gleiche wie memset, aber ist gut zu wissen, dass es ihn gibt
Mal ganz abgesehen davon, dass es kein Befehl ist, sollte man der Vollständigkeit wegen noch erwähnen, dass
char mem[100] = { 0 };
auch nur mit 0 funktioniert (sofern man vorhat, das ganze Array zu initialisieren). Das ganze nennt sich zero-initialization.
-
soso, ich befehle dem Computer also nicht das Array mit 0 zu initialisieren?
aber nachträglich in der runtime kann man dies leider nicht mehr machen oder? genau das will ich nämlich und es klappt mit memset.
-
snake4ever schrieb:
aber nachträglich in der runtime kann man dies leider nicht mehr machen oder? genau das will ich nämlich und es klappt mit memset.