Struktur-Deklarationen
Namen einer „Strukturdeklaration“ ein Typ und gibt eine Sequenz von Variablenwerten an (so genannte „Member“ oder „Felder“ der Struktur), die unterschiedliche Typen aufweisen können.Ein optionaler bezeichneten Bezeichner „Tag“ gibt den Namen des Strukturtyps und kann in den folgenden Verweise auf den Strukturtyp verwendet werden.Eine Variable des Strukturtyps die gesamte Sequenz durch diesen Typ an.Strukturen in C sind Typen, die bekannt sind, als in anderen Sprachen wird „.“
Syntax
Struktur-oder-UNION Bezeichner:
Struktur-oderUNION-Bezeichneropt**{** Struktur-DeklarationListe }Struktur-oderUNION-Bezeichner
Struktur-oder:UNION
structunion
Struktur-DeklarationListe:
Struktur der DeklarationStruktur-DeklarationListe StrukturDeklaration
Der Inhalt wird so definiert, dass Struktur sein
StrukturDeklaration:
Spezifizierer-QualifiziererListe Struktur-DeklaratorListe ;Spezifizierer-QualifiziererListe:
Typspezifizierer Spezifizierer-QualifiziererListe optQualifizierer Spezifizierer-Qualifizierer Liste TYPE opt
Struktur-DeklaratorListe:
StrukturDeklaratorStruktur-DeklaratorListe und StrukturDeklarator
StrukturDeklarator:
declarator
Die Deklaration eines Strukturtyps setzt keine Leerzeichen für eine Struktur beiseite.Es ist nur eine Vorlage für spätere Deklarationen von Variablen Struktur.
Ein zuvor definierter Bezeichner (Tag) kann verwendet werden, um einen Strukturtyp zu verweisen, der an anderer Stelle definiert ist.In diesem Fall kann Struktur-Deklaration Liste nicht wiederholt werden, solange die Definition sichtbar ist.Deklarationen von Zeigern auf Strukturen und Typdefinitionen für Strukturtypen können die Struktur tag verwenden, bevor der Strukturtyp definiert ist.Allerdings muss die Strukturdefinition vor jedem tatsächlichen Verwendung der Größe der Felder aufgetreten sind.Dies ist eine unvollständige Definition des Typs und der Typ tages.Damit diese nicht abgeschlossen werden kann, muss eine Typdefinition später im gleichen Bereich angezeigt.
Die Struktur-Deklaration Liste gibt die Typen und Namen der Strukturmember an.Ein Struktur-Deklaration Liste-Argument enthält ein oder mehrere Variablen oder Felderläuterungen.
Jede Variable, die in der Struktur-Deklaration Liste deklariert wurde, wird als Member des Strukturtyps definiert.Variablendeklarationen in der Struktur-Deklaration Liste weisen das gleiche Format wie andere Variablendeklarationen, die in diesem Abschnitt erläutert werden, mit der Ausnahme, dass die Initialisierung oder Speicherklassenspezifizierer können Deklarationen nicht enthalten.Der Strukturmember können alle Variablentypen außer Typ void, einen unvollständigen Typ oder einen Funktionstyp haben.
Ein Member kann nicht deklariert werden, um den Typ der Struktur verfügen, in der er enthalten ist.Allerdings kann ein Member als Zeiger auf den Strukturtyp deklariert werden, in dem es angezeigt wird, solange der Strukturtyp ein Tag verfügt.Dies ermöglicht es Ihnen, verknüpfte Listen von Strukturen zu erstellen.
Strukturen führen, die demselben Gültigkeitsbereich wie andere Bezeichner.Bezeichner der Struktur muss einer anderen Struktur, Union und Enumerationen tagen mit derselben Sichtbarkeit unterscheiden.
Jede Struktur in einer DeklarationStruktur-Deklaration Liste muss in der Liste eindeutig sein.Allerdings müssen Bezeichner in einer Struktur-Deklaration Liste nicht von normalen Variablennamen oder von Bezeichnern deklarations andere Struktur in den Listen unterscheiden.
Geschachtelte Strukturen können auch möglich, als wäre sie auf der Dateigültigkeitsbereichs Ebene deklariert wurden.Beispielsweise diese Deklaration:
struct a
{
int x;
struct b
{
int y;
} var2;
} var1;
diese Deklarationen sind beide gültig:
struct a var3;
struct b var4;
Beispiele
Diese Beispiele veranschaulichen Struktur Deklarationen:
struct employee /* Defines a structure variable named temp */
{
char name[20];
int id;
long class;
} temp;
Die employee Struktur verfügt über drei Member: name, idund class.Der name-Member ist ein Array mit 20 Elementen und id und class sind einfache Member mit int und long-Typ.Der Bezeichner employee ist der Bezeichner der Struktur.
struct employee student, faculty, staff;
Dieses Beispiel definiert drei Strukturvariablen: student, facultyund staff.Jede Struktur verfügt über die gleiche Liste von drei Member.Die Member deklariert werden, um den Strukturtyp employeedefiniert haben, werden im vorherigen Beispiel.
struct /* Defines an anonymous struct and a */
{ /* structure variable named complex */
float x, y;
} complex;
Die complex Struktur verfügt über zwei Member mit floatx-Typ und y.Der Strukturtyp verfügt über keine Tag- und ist deshalb anonym oder unbenannte.
struct sample /* Defines a structure named x */
{
char c;
float *pf;
struct sample *next;
} x;
Die ersten beiden Member der Struktur handelt es sich um eine char-Variable und einen Zeiger auf ein float-Wert.Der dritte Member, next, wird als Zeiger auf den Strukturtyp deklariert, der definiert ist (sample).
Anonyme Strukturen können nützlich sein, wenn die Bezeichnung Tag nicht benötigt wird.Dies ist der Fall, wenn eine Deklaration alle Instanzen Struktur definiert werden.Beispiele:
struct
{
int x;
int y;
} mystruct;
Eingebettete Strukturen sind häufig anonym.
struct somestruct
{
struct /* Anonymous structure */
{
int x, y;
} point;
int type;
} w;
Microsoft-spezifisch
Der Compiler lässt der Größe 0 (null) oder ein Array ohne Größenangabe als letzter Member einer Struktur.Dies kann hilfreich sein, wenn sich die Größe eines konstanten Arrays unterscheidet, wenn sie in verschiedenen Situationen verwendet wird.Die Deklaration einer solchen Struktur sieht wie folgt aus:
structBezeichner**{** Festgelegte-vonDeklarationen NAME Array vom Typ[],}.
Array ohne Größenangabe können nur als letzter Member einer Struktur angezeigt werden.Die Strukturen, die Array ohne Größenangabe-Deklarationen enthalten, können in anderen Strukturen geschachtelt werden, solange keine weiteren Member in allen einschließenden Strukturen deklariert werden.Arrays von Strukturen sind nicht zulässig.Der Operator sizeof , wenn er auf eine Variable dieses Typs oder den Typ selbst angewendet wird, hat 0 für die Größe des Arrays an.
Strukturen können Deklarationen ohne einen Deklarator auch angegeben werden, wenn diese Member einer anderen Struktur oder Union sind.Die Feldnamen werden in die einschließende Struktur erweitert.Zum Beispiel wird eine namenlose Struktur wie folgt aus:
struct s
{
float y;
struct
{
int a, b, c;
};
char str[10];
} *p_s;
.
.
.
p_s->b = 100; /* A reference to a field in the s structure */
Weitere Informationen dazu finden Sie unter Struktur und Gewerkschaftsmitglieder Struktur verweist.
Microsoft ENDES bestimmten