Diskussion:C++-Programmierung/ Weitere Grundelemente/ Felder

Mehrdimensionales Array

Bearbeiten

Es sollte jemand, der etwas davon versteht, etwas zu mehrdimensionalen Arrays hinzufügen. Da im Internet nur sehr wenig zufinden ist, es aber trotzdem ein wichtiges Element einer Programmiersprache ist. 19:40, 9. Apr. 2007 (CEST)

Array aus Arrays

Bearbeiten

Eigentlich ist es einfach, wenn man schon eine andere Programmiersprache kann:

int cell[10][20][30]; // Array 10*20*30
Soweit ja. Aber wenns dann ans Initialisieren, Übergabe an Funktionen, Arrays mit dynamischer Größe usw. geht, geht das Theater los. ;-) --RokerHRO 13:08, 20. Jan. 2008 (CET)Beantworten

Kritikpunkte

Bearbeiten
  • Sprachliches: Ich weiß nicht, ob es dem Stil dieses Wikibooks entsprechen soll, wenn man Formulierungen wie »[...] wird Ihnen das erst zur Laufzeit schmerzlich bewusst gemacht.« verwendet. Nicht nur dass ich persönlich so einen Stil eher abstoßend finde, so ist die Aussage in diesem Satz auch falsch, denn der Standard fordert nicht, dass der Schreiber derartigen Codes Schmerzen erleiden muss. ;-) Spaß beiseite: Ich halte derartige Statements in einem seriösen Lehrbuch für unangebracht. Zugriffe über Arraygrenzen erzeugen schlicht undefiniertes Verhalten. Punkt. In modernen Desktop-Betriebssystemen kann das Betriebssystem einige dieser Bereichsüberschreitungen abgefangen und das Programm abbrechen ("segmentation fault"), manchmal überschreibt man auch einfach nur eigenen Speicherbereich in anderen Variablen, was zu schwer zu findenden Bugs führt. In Betriebssystemen ohne Speicherschutz kann $SONSTWAS passieren. Aber darüber zu spekulieren, ist IMHO nicht Aufgabe dieses Buches.
  • Zu mehrdimensionalen Arrays sollte wirklich mehr erzählt werden, insbesondere die Gefahren und Probleme, die da sehr schnell auftreten. Ich verweise da einfach mal auf die C++-Faq von parashift.com, die haben da einiges zusammengetragen.
  • Arrays und Zeiger, das ist auch so ein leidiges Thema, wo viel Unsinn und Falsches geschrieben wird. Der Compiler weiß schon, dass ein Array ein Array ist und sein Name wird auch nicht zwangsläufig als Zeiger interpretiert. Wers nicht glaubt, möge mal bei int a[10]; int s = sizeof(a); den Wert von s angucken. a belegt also sehr wohl Speicher, nämlich 10·sizeof(int). Und das "ist vor Schreibzugriffen geschützt" ist zumindest eine unglückliche Formulierung, wenn nicht falsch, denn Namen sind immer vor Schreibzugriffen geschützt. Das Array selbst ist dies aber nicht.

--RokerHRO 01:54, 23. Aug. 2007 (CEST)Beantworten

Wirklich spannend wird das Thema Arrays wenn man sich mit der Initialisierung, Deinialisierung, und Kopieren von beschäftigt.

Größenangabe

Bearbeiten

Im Text steht: Wenn die Größenangabe explizit gemacht wurde, gibt der Compiler einen Fehler aus, falls die Anzahl der Intitiallisierungselemente nicht mit der Größenangabe übereinstimmt. Warum bekomme ich bei int array[10] = {1, 2, 3}; keine Fehlermeldung, obwohl das Array nur drei Initialisierungslemente enthält? --tim 14:20, 5. Okt. 2008 (CEST)Beantworten

Der ISO-Standard sagt in KApitel 8.5.1, wie solche Initialisierlisten auszusehen haben und was erlaubt ist und was nicht:
An initializer-list is ill-formed if the number of initializers exceeds the number of members or elements to initialize. [...] If there are fewer initializers in the list than there are members in the aggregate, then each member not explicitly initialized shall be value-initialized (8.5.) [...]
Also: Weniger Elemente in der Initialisiererliste sind erlaubt, mehr nicht. --RokerHRO 21:20, 5. Okt. 2008 (CEST)Beantworten

Speicherreservierung von Datenfelder

Bearbeiten

Es sollte unbedingt - vielleicht auch mit einem Verweis auf andere Kapitel - erklärt werden, wann der Speicher und wo für ein Datenfeld reserviert wird. Ich glaube, dass es im Stack landet, da der Speicher ja zur Übersetzungszeit (statisch) zugewiesen wird. Auch bei einem char* und einem std::string. Die Frage ist nur, wo der passende Platz dafür ist. Zumindest sollte ein hier Hinweis dorthin sein. Sae1962 12:58, 20. Jun. 2011 (CEST)Beantworten

Zurück zur Seite „C++-Programmierung/ Weitere Grundelemente/ Felder“.