Ich bin auf einen Code gestoßen, der Folgendes enthält:
struct ABC {
unsigned long array[MAX];
} abc;
Wann ist es sinnvoll, eine solche Erklärung zu verwenden?
c
arrays
coding-style
struct
Joe.Z
quelle
quelle
Ein weiterer Vorteil ist, dass die Größe abstrahiert wird, sodass Sie nicht den
[MAX]
gesamten Code verwenden müssen, wo immer Sie ein solches Objekt deklarieren. Dies könnte auch mit erreicht werdenAber dann haben Sie ein viel größeres Problem: Sie müssen sich bewusst sein, dass
ABC
es sich um einen Array-Typ handelt (obwohl Sie dies nicht sehen können, wenn Sie Variablen vom Typ deklarierenABC
), sonst werden Sie von der Tatsache gestochen, dassABC
dies etwas anderes bedeutet in einer Funktionsargumentliste versus in einer Variablendeklaration / -definition.Ein weiterer Vorteil ist, dass Sie mit der Struktur später bei Bedarf weitere Elemente hinzufügen können, ohne viel Code neu schreiben zu müssen.
quelle
Sie können eine Struktur kopieren und eine Struktur von einer Funktion zurückgeben.
Sie können dies nicht mit einem Array tun - es sei denn, es ist Teil einer Struktur!
quelle
Sie können es so kopieren.
Für ein Array müssten Sie die memcpy- Funktion oder eine Schleife verwenden, um jedes Element zuzuweisen.
quelle
Sie können struct verwenden, um einen neuen Datentyp wie string zu erstellen . Sie können definieren:
oder Sie können eine Liste von Daten erstellen , die Sie anhand von Funktionsargumenten verwenden oder in Ihren Methoden zurückgeben können. Die Struktur ist flexibler als ein Array, da sie einige Operatoren wie = unterstützen kann und Sie darin einige Methoden definieren können.
Hoffe es ist nützlich für dich :)
quelle
Ein weiterer Vorteil der Verwendung eines solchen
struct
ist, dass es die Typensicherheit überall dort erzwingt, wo ein solchesstruct
verwendet wird; Insbesondere wenn Sie zwei Typen haben, die aus Arrays gleicher Größe bestehen, die für unterschiedliche Zwecke verwendet werden, können Sie mit diesen Typen vermeiden, dass ein Array versehentlich unangemessen verwendet wird.Wenn Sie ein Array nicht in a
struct
einschließen, können Sie dennoch ein deklarierentypedef
: Dies hat einige der Vorteile vonstruct
: • Der Typ wird einmal deklariert, • Die Größe wird automatisch korrigiert, • Die Absicht des Codes wird klarer, • und Code ist wartbarer - aber Sie verlieren ◦ strenge Typensicherheit, ◦ die Fähigkeit, Werte des Typs zu kopieren und zurückzugeben und ◦ die Fähigkeit, später Mitglieder hinzuzufügen, ohne den Rest Ihres Codes zu beschädigen. Zweitypedef
s für bloße Arrays eines bestimmten Typs ergeben nur dann unterschiedliche Typen, wenn sie unterschiedliche Größen haben. Wenn Sie außerdem das Argumenttypedef
without*
in einem Funktionsargument verwenden, entspricht dies einerchar *
drastischen Reduzierung der Typensicherheit.Zusammenfassend :
quelle
Eine Struktur kann Array-Initialisierungs-, Kopier- und Fini-Funktionen enthalten, die einige der Vorteile der OOP-Speicherverwaltungsparadigmen emulieren. Tatsächlich ist es sehr einfach, dieses Konzept zu erweitern, um ein generisches Dienstprogramm zur Speicherverwaltung zu schreiben (indem Sie die Struktur sizeof () verwenden, um genau zu wissen, wie viele Bytes verwaltet werden), um eine benutzerdefinierte Struktur zu verwalten. Viele der in C geschriebenen intelligenten Produktionscodebasen verwenden diese häufig und verwenden normalerweise nie ein Array, es sei denn, sein Umfang ist sehr lokal.
Tatsächlich können Sie für ein in eine Struktur eingebettetes Array andere "intelligente Dinge" ausführen, z. B. die gebundene Überprüfung, wann immer Sie auf dieses Array zugreifen möchten. Auch hier ist es eine schlechte Idee, ihn zu verwenden und Informationen programmübergreifend weiterzugeben, es sei denn, der Array-Bereich ist sehr begrenzt. Früher oder später werden Sie auf Fehler stoßen, die Sie nachts wach halten und Ihre Wochenenden ruinieren.
quelle
struct
das nur ein Array enthält.