1. Definition des Strukturtyps
Definitionsmethode 1:
Typedef struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
} *LinkList;
Definitionsmethode 2:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
};
Typedef struct LNode *LinkList;
Die beiden obigen Definitionsmethoden sind äquivalent, das heißt,*LinkListalsstruct LNodeTyp zu definieren, das heißtLinkListist als Typname definiert. Auf diese Weise können SieLinkListverwenden, um neue Variablen zu definieren und zu deklarieren, wie z. B.:
LinkList L;
das heißt, zu definierenLals Zeigervariable vom Typstruct LNode.
2. Definition von Variablen des Strukturtyps
Definitionsmethode 1:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
}LnodeA;
Definitionsmethode 2:
struct LNode {
int data; // 数据域
struct LNode *next; // 指针域
};
struct LNode LnodeA;
Die beiden obigen Definitionsmethoden sind ebenfalls äquivalent; auf diese Weise wirdLnodeAals einestruct LNodeVariable des Typs definiert, das heißtLnodeAals einstruct LNodeVariablenname des Typs.
Definitionsmethoden für Strukturen und interne Tabellen
1. Struktur, transparenter Tabellenbereich, DATA ELEMENT, DOMAIN
Eine transparente Tabelle ist eine logische Beschreibung einer physischen Tabelle. Die transparente Tabelle enthält viele Felder, und einige Felder sind als PRIMARY KEY definiert. Die Felder enthalten auch DATA ELEMENT, das zur Beschreibung von Sprachattributen und technischen Attributen verwendet wird. DATA ELEMENT enthält auch DOMAIN, das Datentyp und Feldlänge definiert.
Eine Struktur wird im Allgemeinen verwendet, um eine Strukturvariable zu definieren, mit Speicherung temporärer Daten und ohne PRIMARY KEY. Eine Struktur enthält COMPONENT statt FIELD.
2. Die Attribute in einer internen Tabelle sind in drei Typen unterteilt: LINE TYPE, KEY, TABLE KIND.
LINE TYPE: Eine einzelne Zeile in einer INTERNAL TABLE wird LINE TYPE genannt, und die Struktur jeder Zeile ist gleich.
KEY: Entspricht dem Primärschlüssel in einer Datenbank. Er ist nützlich beim Sortieren, UNIQUE oder NON-UNIQUE.
TABLE KIND: Wird in STANDARD, SORTED, HASHED unterteilt.
Definition der drei Arten von internen Tabellen
Standardtabelle:
DATA itab1 TYPE STANDARD TABLE OF scarr WITH NON-UNIQUE KEY carrid.
Sortierte Tabelle:
DATA itab2 TYPE SORTED TABLE OF scarr WITH NON-UNIQUE KEY carrid.
Hashed-Tabelle:
DATA itab3 TYPE HASHED TABLE OF scarr WITH UNIQUE KEY carrid.
Allgemeine Definitionsmethode (Standardtabelle)
Eine Standardtabelle auf Basis einer Datenbanktabelle definieren
DATA itab4 TYPE TABLE OF scarr.
Eine Standardtabelle auf Basis einer selbst definierten Strukturvariable definieren (am häufigsten)
DATA: BEGIN OF wa,
carrid TYPE scarr-carrid,
carrnamen TYPE scarr-carrname,
END OF wa.
DATA itab5 LIKE TABLE OF wa.
Eine Standardtabelle auf Basis eines Tabellentyps im Data Dictionary definieren
DATA itab6 TYPE ztabtype00_1.
Eine interne Tabelle auf Basis einer internen Tabelle definieren
DATA itab7 LIKE itab6.
Eine Struktur auf Basis einer internen Tabelle definieren
DATA wa1 LIKE LINE OF itab7.
3. Möglichkeiten, eine Struktur zu definieren
Eine Strukturvariable (oder einen Typ) eines Programms auf Basis einer Tabelle oder Struktur im Data Dictionary definieren
types str1 type spfli. data str2 type sflight.
Eine Strukturvariable (oder einen Typ) in einem Programm selbst definieren - am häufigsten
data: begin of wa, carrid type spfli-carrid, com(10) type c, end of wa.
Eine Struktur auf Basis einer internen Tabelle definieren
data wa like line of itab.
Hinweis:Was auf Basis einer Datenbanktabelle definiert wird, muss eine Struktur sein
Zuordnung von Feldern mit demselben Namen (wichtig)
Move-corresponding A to B.
READ dient zum Lesen eines Datensatzes aus einer internen Tabelle
read table itab like table of wa.
Um mehrere Datensätze aus einer internen Tabelle zu lesen, verwenden Sie LOOP
loop at itab into wa.
Erklärung in der Sprache C/C++
Strukturdefinition
Eine Struktur (struct) ist eine Datensammlung, die aus einer Reihe von Daten desselben Typs oder unterschiedlicher Typen besteht, auch Struktur genannt.
Funktion von Strukturen
Eine Struktur ist wie andere grundlegende Datentypen, z. B. int-Typ, char-Typ; nur eine Struktur kann zu dem Datentyp gemacht werden, den Sie möchten, um die spätere Verwendung zu erleichtern.
In tatsächlichen Projekten existieren Strukturen in großer Zahl. F&E-Personal verwendet häufig Strukturen, um einige Eigenschaften zu kapseln und neue Typen zu bilden.
Die Rolle von Strukturen in Funktionen ist nicht Bequemlichkeit; ihre Hauptrolle ist die Kapselung. Der Vorteil der Kapselung besteht darin, dass sie wiederverwendet werden kann. Sie ermöglicht es Benutzern, sich nicht darum zu kümmern, was dies ist, sondern es einfach gemäß der Definition zu verwenden.
Größe von Strukturen und Speicherausrichtung
Die Größe einer Struktur ist nicht einfach die Summe ihrer Elemente, weil die Mainstream-Computer, die wir heute verwenden, CPUs mit 32-Bit-Wortbreite haben. Für diese Art von CPU ist das Lesen einer Zahl von 4 Bytes effizienter und bequemer als das Lesen eines Bytes. Wenn daher die erste Adresse jedes Members in einer Struktur ein Vielfaches von 4 ist, ist das Abrufen von Datenelementen relativ effizienter. Dies ist der Ursprung der Speicherausrichtung.
Der Compiler auf jeder spezifischen Plattform hat seinen eigenen Standard-"Alignment-Faktor" (auch Alignment-Modul genannt). Programmierer können die Präprozessor-Anweisung#pragma pack(n),n=1,2,4,8,16 verwenden, um diesen Faktor zu ändern, wobei n der "Alignment-Faktor" ist, den Sie angeben möchten.
Regeln:
- 1. Ausrichtungsregel für Datenelemente: Bei den Datenelementen einer Struktur (struct) (oder Union) wird das erste Datenelement bei Offset 0 platziert, und jedes nachfolgende Datenelement wird gemäß#pragma packdem kleineren Wert aus dem angegebenen Wert und der Länge des Datenelements selbst ausgerichtet.
- 2. Allgemeine Ausrichtungsregel einer Struktur (oder Union): Nachdem jedes Datenelement seine eigene Ausrichtung abgeschlossen hat, muss die Struktur (oder Union) selbst ebenfalls ausgerichtet werden. Die Ausrichtung basiert auf< span class="marked">#pragma pack dem kleineren Wert aus dem angegebenen Wert und der Länge des größten Datenelements in der Struktur (oder Union).
- 3. Durch Kombination von 1 und 2 lässt sich ableiten: Wenn der n-Wert von #pragma pack gleich den Längen aller Datenelemente ist oder diese überschreitet, hat die Größe dieses n-Werts keine Auswirkung.
Strukturen in C++
In der Sprache C können Sie Strukturtypen definieren, um mehrere zusammengehörige Variablen als eine Einheit zu bündeln. Variablen in einer Struktur können denselben, teilweise denselben oder völlig unterschiedliche Datentypen haben. In der Sprache C können Strukturen keine Funktionen enthalten. In der objektorientierten Programmierung besitzen Objekte Zustand (Attribute) und Verhalten; der Zustand wird in Membervariablen gespeichert, und das Verhalten wird durch Membermethoden (Funktionen) implementiert. Strukturen in C können nur den Zustand eines Objekts beschreiben, nicht das Verhalten eines Objekts. In C++ werden Strukturen erweitert, um die Kontinuität des Übergangs von C zu C++ zu berücksichtigen. Strukturen in C++ können Funktionen enthalten, daher haben Strukturen in C++ auch die Funktionalität von Klassen. Im Gegensatz zu class sind in einer Struktur enthaltene Funktionen standardmäßig öffentlich, nicht privat.
Beispiel für C++-Konsolenausgabe:
Beispiel
Unterschiede zwischen Strukturen und Klassen in C++
In C++ unterscheiden sich Klassen und Strukturen nur in zwei Punkten; abgesehen davon gibt es keine Unterschiede.
- (1) Die standardmäßige Zugriffsberechtigung für Member ist in class private, während sie in struct public ist.
- (2) Die Vererbung von class ist standardmäßig private, während die Vererbung von struct standardmäßig public ist.
Was ist der Unterschied zwischen diesen beiden Definitionen?
typedef struct student
{
int num;
struct student *next;
}student;
struct student
{
int num;
struct student *next;
};
Das zweite "struct student" definiert eine Studentenstruktur, verstehst du das?
Das erste verwendet typedef, um den Strukturtypnamen "struct student" als "student" neu zu definieren. Das heißt, "struct student" und "student" bezeichnen dasselbe und sind beide Bezeichner eines Typs. Zum Beispiel benennt "typedef int zhengshu;" den Integer int in zhengshu um. Die folgenden Definitionen: "int i;" und "zhengshu i;" sind äquivalent.
Eine Struktur ist eine Kombination aus verschiedenen Variablen, die aus Basisdatentypen zusammengesetzt und durch einen Bezeichner benannt sind. In einer Struktur können unterschiedliche Datentypen verwendet werden.
Deklaration einer Struktur und Definition einer Strukturvariablen
In Turbo C ist eine Struktur ebenfalls ein Datentyp, und Strukturvariablen können verwendet werden. Daher müssen Strukturvariablen wie Variablen anderer Typen vor ihrer Verwendung definiert werden.
Das allgemeine Format zum Definieren einer Strukturvariablen ist:
struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构变量;
Der Strukturname ist der Bezeichner der Struktur, nicht der Variablenname.
Die Typen sind die fünf in Abschnitt 2 beschriebenen Datentypen (Ganzzahl, Gleitkommazahl, Zeichen, Zeiger und void).
Jede Typvariable, aus der eine Struktur besteht, wird als Strukturmitglied bezeichnet. Es ist wie ein Array-Element, aber auf Array-Elemente wird über Indizes zugegriffen, während bei Strukturen auf Mitglieder über Variablennamen zugegriffen wird.
Das folgende Beispiel veranschaulicht, wie man eine Strukturvariable definiert.
struct string
{
char name[8];
int age;
char sex[4];
char depart[20];
float wage1,wage2,wage3;
}person;
Dieses Beispiel definiert eine Strukturvariable "person" mit einem Strukturnamen "string". Wenn der Variablenname "person" weggelassen wird, wird daraus eine Deklaration der Struktur. Ein bereits deklarierter Strukturname kann ebenfalls verwendet werden, um Strukturvariablen zu definieren. Bei dieser Definition wird das obige Beispiel zu:
struct string
{
char name[8];
int age;
char sex[4];
char depart[20];
float wage1,wage2,wage3;
};
struct string person;
Wenn Sie mehrere Strukturvariablen mit derselben Form definieren müssen, ist diese Methode bequemer. Sie deklariert zuerst die Struktur und verwendet dann den Strukturnamen, um die Variablen zu definieren.
Zum Beispiel:
struct string Tianyr, Liuqi, ...;
Wenn der Strukturname weggelassen wird, spricht man von einer anonymen Struktur. Diese Situation tritt häufig innerhalb von Funktionen auf. Bei Verwendung dieser Art von Struktur wird das vorherige Beispiel zu:
struct
{
char name[8];
int age;
char sex[4];
char depart[20];
float wage1,wage2,wage3;
} Tianyr, Liuqi;
Verwendung von Strukturvariablen
Eine Struktur ist ein neuer Datentyp, daher können Strukturvariablen wie Variablen anderer Typen zugewiesen und bearbeitet werden. Der Unterschied besteht darin, dass Strukturvariablen Mitglieder als grundlegende Variablen verwenden.
Die Darstellung von Strukturmitgliedern ist:
structure variable.member name
Wenn Sie Strukturvariable.Mitgliedsname als Ganzes betrachten, ist der Datentyp dieses Ganzen derselbe wie der Datentyp dieses Mitglieds in der Struktur, sodass es wie die zuvor beschriebenen Variablen verwendet werden kann.
Das folgende Beispiel definiert eine Strukturvariable, bei der jedes Mitglied Daten von der Tastatur empfängt, dann werden die Gleitkommazahlen in der Struktur summiert und das Ergebnis angezeigt. Bitte beachten Sie den Zugriff auf verschiedene Strukturmitglieder in diesem Beispiel.
Beispiel
Strukturarrays und Strukturzeiger
Eine Struktur ist ein neuer Datentyp, und sie kann auch Strukturarrays und Strukturzeiger haben.
1. Strukturarrays
Ein Strukturarray ist eine Sammlung von Variablen mit demselben Strukturtyp. Um beispielsweise die Namen, Geschlechter, Alter und Adressen von 40 Schülern in einer Klasse zu definieren, können Sie sie als Strukturarray definieren. Wie unten gezeigt:
struct
{
char name[8];
char sex[4];
int age;
char addr[40];
}student[40];
Es kann auch definiert werden als:
struct string
{
char name[8];
char sex[4];
int age;
char addr[40];
};
struct string student[40];
Es sollte darauf hingewiesen werden, dass beim Zugriff auf Mitglieder eines Strukturarrays das Array-Element als Strukturvariable behandelt wird, und seine Form ist:
structure array element.member name
Zum Beispiel:
student[0].name student[30].age
Tatsächlich entspricht ein Strukturarray einer zweidimensionalen Struktur. Die erste Dimension sind die Strukturarray-Elemente, jedes Element ist eine Strukturvariable, und die zweite Dimension sind die Strukturmitglieder.
Hinweis: Mitglieder eines Strukturarrays können auch Array-Variablen sein.
Zum Beispiel:
struct a
{
int m[3][5];
float f;
char s[20];
}y[4];
Um auf die Strukturvariable in Struktur ay[2]zuzugreifen, kann diese Variable wie folgt geschrieben werdeny[2].m[1][4]
2. Strukturzeiger
Ein Strukturzeiger ist ein Zeiger auf eine Struktur. Er wird durch einen *-Operator definiert, der vor den Namen der Strukturvariablen gesetzt wird. Zum Beispiel definieren Sie mit der zuvor beschriebenen Struktur einen Strukturzeiger wie folgt:
struct string
{
char name[8];
char sex[4];
int age;
char addr[40];
}*student;
Sie können auch den Namen des Strukturzeigers weglassen und nur eine Strukturdeklaration vornehmen und dann die folgende Anweisung verwenden, um den Strukturzeiger zu definieren.
struct string *student;
Die Verwendung eines Strukturzeigers für den Zugriff auf Strukturmember unterscheidet sich im Ausdruck von der Verwendung einer Strukturvariablen für den Zugriff auf Strukturmember. Der Zugriff auf Strukturmember über einen Strukturzeiger wird ausgedrückt als:
structure pointer name->structure member
wobei->zwei Symbole sind,-und>kombiniert, wie ein Pfeil, der auf ein Strukturmember zeigt. Um beispielsweise den Strukturmembern name und age in der oben definierten Struktur Werte zuzuweisen, können Sie die folgenden Anweisungen verwenden:
strcpy(student->name, Lu G.C); student->age=18;
Tatsächlich iststudent->namedie Abkürzung für(*student).name.
Es sollte darauf hingewiesen werden, dass ein Strukturzeiger ein Zeiger auf eine Struktur ist, das heißt, die erste Adresse des ersten Members in der Struktur. Daher sollte der Strukturzeiger vor der Verwendung initialisiert werden, das heißt, Speicherplatz in der Größe der gesamten Strukturlänge in Bytes zuzuweisen. Dies kann mit der folgenden Funktion erfolgen, wobei weiterhin das vorherige Beispiel verwendet wird, um es wie folgt zu veranschaulichen:
student=(struct string*)malloc(size of (struct string));
size of (struct string)Ermittelt automatisch die Byte-Länge der Struktur string. Die Funktion malloc() definiert einen Speicherbereich in der Größe der Strukturlänge und gibt dann dessen erste Adresse als Strukturzeiger zurück.
Hinweis:
- 1. Eine Struktur ist ein Datentyp, daher sind die definierten Strukturvariablen oder Strukturzeigervariablen je nachdem, wo sie definiert sind, auch lokale oder globale Variablen.
- 2. Der Name einer Strukturvariablen ist nicht die Adresse, die auf die Struktur zeigt, was sich von der Bedeutung eines Array-Namens unterscheidet. Wenn Sie daher die erste Adresse des ersten Members in der Struktur ermitteln müssen, sollte es&[Strukturvariablenname] sein。
- 3. Komplexe Form der Struktur: verschachtelte Strukturen
Eine verschachtelte Struktur bedeutet, dass ein Struktur-Member eine andere Struktur enthalten kann. Turbo C erlaubt diese Art der Verschachtelung.
Zum Beispiel: Das Folgende ist eine Struktur mit Verschachtelung
struct string
{
char name[8];
int age;
struct addr address;
} student;
Hier: addr ist der Strukturname einer anderen Struktur, und er muss zuerst deklariert werden, das heißt,
struct addr
{
char city[20];
unsigned lon zipcode;
char tel[14];
}
Wenn Sie einen Wert an zipcode in der address-Struktur zuweisen möchten, die ein Member der student-Struktur ist, können Sie schreiben:
student.address.zipcode=200001;
Jeder Struktur-Member-Name wird einzeln von der äußersten Schicht zur innersten Schicht aufgelistet, das heißt, der Ausdruck verschachtelter Struktur-Member ist:
structure variable name.nested structure variable name.structure member name
Es kann viele verschachtelte Strukturen geben, und der Struktur-Member-Name ist der Name eines Members in der innersten Struktur, der keine Struktur ist.
Original-Link: https://www.cnblogs.com/yuxinJ/p/4688496.html