Unterschied zwischen Initialisierung und Zuweisung



  • Hallo liebe Gemeinde.

    Ich bin, was C/C++ anfängt, zwar kein Anfänger mehr, aber aufgrund von vielen Halbwahrheiten weiß ich "nur" bisschen was. Ich poste hier, damit sich diese Halbwahrheiten verringern und ich C, primär C++, besser verstehe.

    In dem Skript, was ich behandle, heißt es bzgl. der Initialisierung und Zuweisung von Variablen wie folgt:

    Die Initialisierung sieht nahezu wie eine Zuweisung aus, und bei Integer-Variablen gibt es auch kaum einen Unterschied. Bei der späteren Behandlung von Konstanten werden Sie sehen, daß man bestimmte Werte initialisieren muß, da Zuweisungen nicht möglich sind. Der wesentliche Unterschied besteht darin, daß die Initialisierung bei der Erzeugung der Variablen stattfindet.

    Ich schreibe mal das, was ich mir denke:

    Es gibt Variablen, denen ich einen Wert zuweisen kann, gleich ob sie globale oder lokale Variablen sind. Und dann gibt es globale Variablen, denen ich nur lokal z. B. in einer For-Schleife einen Wert zuweisen kann und an einer anderen Stelle im Quellcode einen anderen Wert zuweisen kann und dass eben global nur initialisiert werden.

    Liege ich mit der Denkweise falsch????

    Vielen Dank für die Antworten.

    Gruß

    Max



  • silent_max schrieb:

    Liege ich mit der Denkweise falsch????

    Ja.

    silent_max schrieb:

    Bei der späteren Behandlung von Konstanten werden Sie sehen, daß man bestimmte Werte initialisieren muß, da Zuweisungen nicht möglich sind.

    sagt:

    int i; muss nicht zwingend initialisiert ( int i = 42; oder auch int i(42) ) werden, da der Variable i auch später noch Werte zugewiesen werden können. Handelt es sich hingegen um zB. einen const int k so muss er im Zuge der Deklaration auch initialisiert werden, da Zuweisungen an Konstanten nicht erlaubt sind.



  • Also sprich, wenn eine Integervariable über´n gesamten Quellcode konstant bleiben soll, dann initialisier ich die Integervariable mit z.b.

    const int x = 5;

    Ansonsten, wenn die Integervariable sich immer mal wieder ändern kann/soll, dann einfach

    int x;

    Beispiel:

    In einem Wohnviertel einer Stadt gibt es mehrere Bauplätze. Alle Bauplätze sind 50m breit und 80m lang. Es darf ein Haus darauf gebaut werden, wenn es 25m lang und 40m breit ist damit ein Garten auch vorhanden ist, die Höhe des Hauses ist variabl.

    #include <iostream>
    using namespace std; 
    
    int main()
    {
    int const Länge_Bauplatz  = 50;
    int const Breite_Bauplatz = 80;
    int const Länge_Haus  = 25;
    int const Breite_Haus = 40;
    int Höhe_Haus;
    
    int Fläche_Bauplatz;
    int Fläche_Haus;
    int Fläche_Garten;
    
    cout << "Wie hoch soll Ihr Haus werden?"
    cin  >> Höhe_Haus;
    
    Fläche_Bauplatz = Länge_Bauplatz*Breite_Bauplatz;
    Fläche_Haus     = Länge_Haus    *Breite_Haus;
    Fläche_Garten   = Fläche_Bauplatz - Fläche_Haus;
    Volumen_Haus    = Höhe_Haus     *Fläche_Haus;
    
    cout << "Fläche Bauplatz: " << Fläche_Bauplatz << endl;
    cout << "Fläche Haus : " << Fläche_Haus     << endl;
    cout << "Fläche Garten: " << Fläche_Harten  << endl;
    cout << "Volumen Haus: " << Volumen_Haus    << endl;
    
    retrun 0;
    }
    

    /edit pumuckl: cpp-Tags. Demnächst bitte selbst dran denken!



  • silent_max schrieb:

    Ansonsten, wenn die Integervariable sich immer mal wieder ändern kann/soll, [...]

    ... solltest Du sie trotzdem initialisieren.

    silent_max schrieb:

    Beispiel:

    Du musst nicht alle Variablen am Anfang einer Funktion deklarieren. Deklarier sie dort, wo du sie brauchst. const typ variablenname ist gebräuchlicher als typ const variablenname . Umlaute im Quellcode ist bäääh und Du musst nicht hinschreiben, daß main() den Wert 0 zurückgeben soll, das passiert automatisch wenn main() nichts zurückgibt.

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	const int Laenge_Bauplatz = 50;
    	const int Breite_Bauplatz = 80;
    	const int Laenge_Haus = 25;
    	const int Breite_Haus = 40;
    
    	cout << "Wie hoch soll Ihr Haus werden?" << std::endl;
    	int Hoehe_Haus;
    	cin >> Hoehe_Haus;
    
    	int Flaeche_Bauplatz = Laenge_Bauplatz * Breite_Bauplatz;
    	int Flaeche_Haus = Laenge_Haus * Breite_Haus;
    	int Flaeche_Garten = Flaeche_Bauplatz - Flaeche_Haus;
    	int Volumen_Haus = Hoehe_Haus * Flaeche_Haus;
    
    	cout << "Fläche Bauplatz: " << Flaeche_Bauplatz << endl;
    	cout << "Fläche Haus: " << Flaeche_Haus << endl;
    	cout << "Fläche Garten: " << Flaeche_Garten << endl;
    	cout << "Volumen Haus: " << Volumen_Haus << endl;
    }
    

    PS: Nimm für Code bitte cpp-Tags.



  • Swordfish schrieb:

    Deklaration

    Definition. :p



  • God damnit! 🙄 Es war noch sehr früh in der Früh...



  • Swordfish schrieb:

    const typ variablenname ist gebräuchlicher als typ const variablenname .

    Woher hast du diese Information? Das ist völlig okay so und in meinen Augen auch konsistenter.



  • Swordfish schrieb:

    const typ variablenname ist gebräuchlicher als typ const variablenname .

    Bitte lass solche Tips. Zum einen sind beide Ausdrücke identisch, zum anderen gibt es unabhängig von der Gebräuchlichkeit zumindest in C++ Gründe warum seine Schreibweise durchaus sinnvoll sein kann, Pi hat schon die Konsistenz erwähnt.

    Nehmen wir mal folgende Beispiele:

    // 1          2
    const int * const a; // \ Inhaltlich identisch, aber leichter zu merken ist
    int const * const b; // / b, wenn man sagt das immer hinter dem Teil const
    //    1       2           geschrieben wird, der Konstant sein soll.
    //                        Gelesen: Int-Konstante, Zeiger-Konstante.
    // [1 austauschbar, 2 nur hier möglich]
    


  • asc schrieb:

    Bitte lass solche Tips.

    Ok, diese "Merkregel" kannte ich nicht.

    Ich lese sowas von rechts nach links und dabei ist mir die Position des evtl. vorhandenen 2. const wurscht. Entweder es gibt eins, oder nicht.
    Bei const int i; hab' ich aber keinen Grund, von rechts nach links zu lesen - und "konstanter integer i" hört sich für mich um Meilen besser an als "integer konstante i".

    Aber das ist subjektiv. Auf jeden Fall werde ich in Zukunft niemandem mehr die eine oder andere Schreibweise nahelegen.

    //edit: Deutsche Sprache...



  • Swordfish schrieb:

    silent_max schrieb:

    Ansonsten, wenn die Integervariable sich immer mal wieder ändern kann/soll, [...]

    ... solltest Du sie trotzdem initialisieren.

    silent_max schrieb:

    Beispiel:

    Du musst nicht alle Variablen am Anfang einer Funktion deklarieren. Deklarier sie dort, wo du sie brauchst. [c]

    Ok, werde ich mir merken. Das sind dann lokale Variablen??

    Das mit den Umlauten werde ich mir ebenfalls merken.

    #include <iostream>
    using namespace std;
    
    	const int Laenge_Bauplatz = 50;
    	const int Breite_Bauplatz = 80;
    	const int Laenge_Haus = 25;
    	const int Breite_Haus = 40;
    
    Warum hast D die Länge und Breite als const int deklariert/definiert, wenn diese variabel sein können?? Bedingung ist, dass das aus max. 50 m lang und max. 80 m breit sein darf?
    	
    	cout << "Wie hoch soll Ihr Haus werden?" << std::endl;
    	int Hoehe_Haus;
    	cin >> Hoehe_Haus;
    
    	int Flaeche_Bauplatz = Laenge_Bauplatz * Breite_Bauplatz;
    	int Flaeche_Haus = Laenge_Haus * Breite_Haus;
    	int Flaeche_Garten = Flaeche_Bauplatz - Flaeche_Haus;
    	int Volumen_Haus = Hoehe_Haus * Flaeche_Haus;
    
    Hier diese Definition leuchtet ein...
    
    	cout << "Fläche Bauplatz: " << Flaeche_Bauplatz << endl;
    	cout << "Fläche Haus: " << Flaeche_Haus << endl;
    	cout << "Fläche Garten: " << Flaeche_Garten << endl;
    	cout << "Volumen Haus: " << Volumen_Haus << endl;
    }
    

    PS: Nimm für Code bitte cpp-Tags.

    Was meinst Du mit "cpp-Tags"??



  • die Tags im Forum die aus deinem hässlichen Tesxtbrocken einen schön formatierten und farblich hervorgehobenen Quellcode machen.



  • Entschuldige, dass ich das noch nicht wusste. Wie schon geschrieben bin ich noch nicht solange mit dabei, um alle Regeln zu wissen.

    Tut mir echt leid. Zumindest habe ich nun das mit dem Initialisieren nun verstanden. Diesbezüglich ein ernstgemeintes Danke.

    Wegen den Tags werde ich mich nun schlau machen.

    Bitte erwartet aber nicht von mir, dass ich es auf Anhieb kann. Ich bin weder voll ausgebildeter Germanist (auch mir können Rechtschreibfehler bzw. grammatikalische Fehltritte passieren) noch kann ich C oder C++ noch nicht so gut wie die Profis hier.

    Gruß

    Max



  • silent_max schrieb:

    Entschuldige, dass ich das noch nicht wusste. Wie schon geschrieben bin ich noch nicht solange mit dabei, um alle Regeln zu wissen.

    Dafür gibts die mit wichtig markierten Threads in so ziemlich jedem ernstzunehmenden Forum. Die sollte man sich durchlesen, bevor man sich ans Posten macht, da stehen solche Regeln nämlich drin. Gilt nicht nur hier sondern allgemein in Foren im Netz.

    Bitte erwartet aber nicht von mir, dass ich es auf Anhieb kann. Ich bin weder voll ausgebildeter Germanist (auch mir können Rechtschreibfehler bzw. grammatikalische Fehltritte passieren) noch kann ich C oder C++ noch nicht so gut wie die Profis hier.

    Für die Tags muss man weder Germanistik stuidert haben noch programmieren können - ein Klick auf den "C/C++"-Button unter den Smileys beim Post erstellen langt.


Anmelden zum Antworten