Antworten:
Sie können das Array als Wert an eine Funktion übergeben oder von einer Funktion als Wert zurückgeben.
Strukturen können im Gegensatz zu Arrays, die in diesen Kontexten zu einem Zeiger zerfallen, als Wert übergeben werden.
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 werden
typedef char ABC[MAX];
Aber 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 deklarieren ABC
), sonst werden Sie von der Tatsache gestochen, dass ABC
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.
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!
Sie können es so kopieren.
struct ABC a, b;
........
a = b;
Für ein Array müssten Sie die memcpy- Funktion oder eine Schleife verwenden, um jedes Element zuzuweisen.
Sie können struct verwenden, um einen neuen Datentyp wie string zu erstellen . Sie können definieren:
struct String {
char Char[MAX];
};
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 :)
Ein weiterer Vorteil der Verwendung eines solchen struct
ist, dass es die Typensicherheit überall dort erzwingt, wo ein solches struct
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 deklarieren typedef
: Dies hat einige der Vorteile von struct
: • 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. Zwei typedef
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 Argument typedef
without *
in einem Funktionsargument verwenden, entspricht dies einer char *
drastischen Reduzierung der Typensicherheit.
Zusammenfassend :
typedef struct A_s_s { char m[113]; } A_s_t; // Full type safey, assignable
typedef char A_c_t[113]; // Partial type-safety, not assignable
A_s_t v_s(void); // Allowed
A_c_t v_c(void); // Forbidden
void s__v(A_s_t); // Type-safe, pass by value
void sP_v(A_s_t *); // Type-safe
void c__v(A_c_t); // UNSAFE, just means char * (GRRR!)
void cP_v(A_c_t *); // SEMI-safe, accepts any array of 113
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.
struct
das nur ein Array enthält.