Entwickler-Ecke
Basistechnologien - Array Initialisierung
Ritzeratze - Sa 26.10.13 01:54
Titel: Array Initialisierung
Moin,
wenn ich ein Array mit dem new Konstruktor erstelle, sind doch eigentlich die Arrayfelder automatisch mit 0 initialisiert, oder irre ich mich da?
Muss ich mit einer Schleife ersts alle Feldinhalte initialisieren?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| static void eingabe(double[] argArray) { for (int index = 0; index < argArray.Length; index++) { Console.Write("Bitte geben Sie die {0} Zahl ein !: ", index + 1); argArray[index] = Convert.ToDouble(Console.ReadLine()); }
}
static void Main(string[] args) { double[] zahlenArray = new double[5];
eingabe(zahlenArray); } |
Gruss Ritze
Moderiert von
Th69: Code- durch C#-Tags ersetzt
Th69 - Sa 26.10.13 11:12
Hallo,
ja, beim Erstellen eines Arrays werden alle Arrayfelder automatisch mit dem Defaultwert initialisiert (d.h. bei Wertetypen 0 [bzw. deren Äquivalent, z.B. bei double 0.0 und bei bool false] und bei Referenztypen null).
Hast du denn eine andere Beobachtung gemacht (denn schließlich kannst du das ja einfach mit dem Debugger oder einer eigenen Schleife überprüfen)?
Ritzeratze - Sa 26.10.13 13:49
Moin Th69,
es scheint so , das die Felder im übergebenden Array keine Werte aufnehmen.
In der Eingabe routine werden keine Werte gespeichert.
Gruss Ritze
jaenicke - Sa 26.10.13 15:15
Ich vermute mal du erwartest, dass die danach in zahlenArray stehen, aber das ist nicht so. Du übergibst an eingabe die Werte als Kopie, aber keine Referenz auf das ursprüngliche Array. Dementsprechend werden die Werte in eingabe in diese Kopie geschrieben, das ursprüngliche Array hat damit aber nichts zu tun.
Wenn du das dort hineingeschrieben haben möchtest, musst du eine Referenz übergeben. Das ist wie mit einer Notizkladde. Du kannst dort etwas hineinschreiben und dann jemandem eine Kopie geben, du kannst aber auch die Originalkladde weitergeben, damit du danach selbst hast was hineingeschrieben wurde.
In C# geht das mit dem Schlüsselwort ref:
http://msdn.microsoft.com/de-de/library/14akc2c7(v=vs.90).aspx
Th69 - Sa 26.10.13 15:39
Hallo jaenicke,
Arrays sind in C# aber stets Referenztypen, d.h. die Arrayfelder können in der aufgerufenen Methode verändert werden. ref bzw. out benötigt man nur, wenn man innerhalb der Methode ein neues Array anlegen und zurückgeben will.
Und Ritzeratze, was stellst du denn nach der Eingabe-Methode mit dem Array an?
Ralf Jansen - Sa 26.10.13 15:42
@jaenicke: In c# werden Arrays per Referenz übergeben. In dem gezeigten Code sollte nach dem Aufruf von eingabe auch die Werte in Zahlenarray stehen. Zumindest der gezeigte Code enthält für mich keinen Fehler.
Ritzeratze - Sa 26.10.13 17:02
Moin,
na genauso wie im Beispiel habe ich es auch in dem von mir zu entwerfenden Programm gebaut. Allerdings habe ich da noch ein Haken drin. Laut Debugger wird was in die Felder geschrieben, wenn ich es ausgeben will, steht aber nichts mehr drin.
Wenn jemand Interesse hat, kann ich das Prg gern mal per pn schicken.
Gruss
Ritze
Th69 - Sa 26.10.13 18:35
Dann ist wohl dein Ausgabe-Code fehlerhaft. Wie sieht er denn aus?
Edit: per PN habe ich den Code zugeschickt bekommen.
Die Methode Anzeigen wird aufgerufen und gibt auch die Werte korrekt aus - leider sieht man sie nicht, da sofort wieder ins Hauptmenü gesprungen wird, welcher in der Design-Methode den Konsoleninhalt löscht. ;-)
@Ritzeratze: füge einfach am Ende dieser Methode (wie bei der Einlesen-Methode) ein Console.ReadKey() o.ä. hinzu.
Fazit: soviel "Lärm" um nichts ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!