Irgendeine Idee, warum dies zu C hinzugefügt wurde, anstatt nur Zeiger zu verwenden? Ich sehe kaum ein, warum Arrays überhaupt verwendet werden sollten, außer um einen bestimmten Speicherplatz auf dem Stapel zuzuweisen. Das bringt Ihnen diesen Vorteil nicht.
– xaxxon
19. Juni 2013 um 8:03 Uhr
Ich habe endlich den Punkt, als ich die Größe der Struktur drucke. Eigentlich belegt das array_field keine Bytes, es ist dasselbe wie array_field[0]die verwendet wird, um ein Array mit variabler Länge in gcc zu erstellen.
– FaceBro
19. Juni 2013 um 8:06 Uhr
@xaxxon Es wurde hinzugefügt, weil Sie mit dieser Funktion echte VLAs haben können Innerhalb eine Struktur, und Sie müssen den Speicher nicht neu zuweisen zweimal. Dies erhöht die Lesbarkeit und verringert die Speicherfragmentierung und die Anzahl der Zeigerdurchläufe (und erhöht so möglicherweise die Leistung ein wenig).
– Benutzer529758
19. Juni 2013 um 8:50 Uhr
@H2CO3: Flexible Array-Mitglieder sind keine VLAs. Im Speziellen, sizeof angewendet auf die Struktur enthält nicht die Größe des Array-Mitglieds; das musst du nur selbst im Auge behalten.
– Keith Thompson
24. Juni 2013 um 16:35 Uhr
Das flexible Array-Member wurde hinzugefügt, um das lange Bestehende zu formalisieren und stützte sich auf “struct hack” (diese Suche ist wirklich nicht vollständig, da einige Instanzen weggelassen werden, aber ohne die Anführungszeichen schleicht sich eine Menge Müll ein).
– dmckee — Ex-Moderator-Kätzchen
8. November 2013 um 2:53 Uhr
Medinoc
Solche Strukturen werden normalerweise auf dem Heap mit einer berechneten Größe zugewiesen, mit Code wie dem folgenden:
Bitte machen Sie das Update rückgängig und posten Sie eine neue Frage.
– undur_gongor
19. Juni 2013 um 8:49 Uhr
Danke für deinen Rat.
– FaceBro
20. Juni 2013 um 1:13 Uhr