Warum eine Struktur ein einzelnes Element-Array verwendet, wie folgt:
%Vor%Um es für die spätere dynamische Zuweisung bequem zu machen?
Mit einem Wort, ja.
Grundsätzlich ist die C99-Methode, dies zu tun, mit einem flexiblen Array-Mitglied :
%Vor%Einige Pre-C99-Compiler lassen Sie durch:
%Vor%Aber um zu garantieren, dass es über alle Compiler hinweg funktioniert, ist:
%Vor%Und dann, egal wie es erklärt wird, können Sie das Objekt mit:
zuweisen %Vor% Obwohl für die besten Ergebnisse sollten Sie size_t
anstelle von int
verwenden.
Dies ermöglicht normalerweise den idiomatischen Zugriff auf Strukturinstanzen variabler Größe. Wenn Sie Ihr Beispiel betrachten, haben Sie zur Laufzeit möglicherweise ein Bitmapset, das wie folgt im Speicher abgelegt ist:
%Vor%Sie enden also mit einer Laufzeitvariablennummer von uint32, die am Ende Ihrer Struktur hängt, aber zugänglich ist, als wären sie inline in der Struktur definiert. Dies ist im Grunde genommen (ab) die Tatsache zu benutzen, dass C keine Array-Grenzen-Laufzeitprüfung durchführt, um Code wie folgt zu schreiben:
%Vor%