zaid38 hat geschrieben: ↑Fr Nov 29, 2019 3:10 pm
Zitat(Eine Initialisierung findet auf einem nicht initialisiertem Speicherbereich statt, während eine Zuweisung auf einem initialisierten Speicherbereich schreibt.) verstehe immer nicht gut
Wie gesagt: Das ganze ist aus einer C++-Sicht, wo hier deutlicher unterschieden wird.
Eine Variable ist ja ein Speicherblock. In dem Moment, wo die Variable beginnt zu existieren, ist dieser Speicherblock aber halt uninitialisiert - der Inhalt ist willkürlich. Die erste Zuweisung nennt man Initialisierung. Das passiert im Idealfall aber nicht durch eine eigene Zuweisung, sondern durch eine Zuweisung, die der Compiler macht. Überschreibt man den Speicherblock spricht man von einer Zuweisung.
In C ist die Unterscheidung nur dadurch gegeben, dass die Initialisierung das erstmalige Beschreiben darstellt, im Idealfall beim Anlegen der Variable:
Optisch sieht das häufig ähnlich wie die Zweisung aus
Code: Alles auswählen
int a = 0; // Initialisierung
float f = 0.0f; // Initialisierung
int v[2] = { 1, 2 }; // Initialisierung.
Es ist aber eben keine Zuweisung, denn beispielsweise
ist keine valide Syntax, auch wenn
eine valide Zuweisung ist und der Initialisierung sehr ähnlich aussieht.
In C werden Primitive (dazu zählen auch int, float und Zeiger) nur auf Anfrage des Programmierers initialisiert, während Felder manchmal automatisch initialisiert werden (nämlich dann, wenn es zur Laufzeit nichts kostet). Vereinfacht ausgedrückt - es schadet nicht davon auszugehen, dass sie nicht ohne ausdrücklichen Wunsch initialisiert werden.
Bei einer Zuweisung sollte eine Variable bereits einen gültigen Wert haben, denn dann überschrieben wird. Ohne Initialisierung haben die Variablen aber einen willkürlichen Wert.
Während eine Integervariable nur einen willkürlichen aber validen Wert haben kann, kann eine float auch einen invaliden Wert haben. Ein nicht initialisierter Integer sorgt für fehlerhafte Berechnungen. Es gibt bei floats hingegen Zahlen, die es nicht gibt. Das sind also keine gültigen Werte. Damit kann man auch nichts Falsches rechnen, wenn einem das Programm um die Ohren fliegt.
Nicht initialisierte Variablen sind eine häufige Fehlerursache. Deswegen wurde da in C++ mehr Wert drauf gelegt, dass eigene Datentypen initialisiert werden, weswegen die Unterscheidung auch hier erst deutlicher zum Tragen kommt und sich auch mehr Unterschiede aufzeigen. Ansonsten vereinfacht: Initialisierung ist die erstemalige Zuweisung.