In den grammatikalischen Strukturen C sind folgende Weise
definiert struct-oder-union-Spezifizierer:
struct-or-union Kennung opt {struct-declaration-list}
Um diesen Strukturbezeichner zu beziehen, müssen Sie seinen Namen verwenden.
Sie können Variablen die folgende Art und Weise erklären
struct node
{
int data;
struct node *next;
} Node;
Hier Node
ist ein Objekt vom Typ struct node
. Der Reihe nach ist struct node
ein Typspezifizierer der Variablen Node
.
Sie können den Bezeichner in einem Strukturspezifizierer weglassen. In diesem Fall wird die Struktur unbenannte Struktur genannt. Wenn Sie jedoch eine solche Struktur verwenden, können Sie innerhalb der Definition nicht auf sich selbst verweisen. Zum Beispiel können Sie nicht schreiben
struct
{
int data;
struct *next;
^^^^^^^^^^^^^
} Node;
weil es unbekannt ist, welche Struktur hier bezeichnet wird.
Sie können unbenannte Strukturen als Elemente anderer Strukturen verwenden. In diesem Fall wird eine solche Struktur anonyme Struktur genannt und ihre Mitglieder werden Mitglieder der umgebenden Struktur.
Zum Beispiel
struct A
{
struct
{
int x;
int y;
];
int z;
};
Diese Struktur A
drei Mitglieder hat x
, y
und z
.
Wenn der Speicherklassenspezifizierer verwendet wird, ist der Deklarator ein Bezeichner, der ein typedef-Name ist, der den für den Bezeichner angegebenen Typ angibt.
So in dieser Erklärung
typedef struct node
{
int data;
struct node *next;
} Node;
Node
ist nicht bereits ein Objekt. Es ist ein Typname, der den Strukturknoten bezeichnet.
ab sofort So können Sie Typnamen Node
anstelle des Typspezifizierer struct node
Ihre Struktur Teil eines Konstrukts ist in der Regel „verknüpfte Liste“ genannt verwenden. Suchen Sie danach, wenn Sie wissen wollen, wie man es benutzt und warum Sie 'struct node * next' geschrieben haben. Was Ihre Frage betrifft, müssten Sie mit 'struct node {...};' in Ihrem Code Variablen als 'struct node mynode1;' deklarieren. Mit 'typedef struct node Node;' müssen Sie nur 'Node mynode1' schreiben – frarugi87
Ich denke, es erzeugt einen Fehler ...' Node * hashtable [SIZE] ', auf der anderen Seite, erzeugt ein Array mit SIZE Elementen; Jeder von ihnen ist ein Zeiger auf einen struct-Knoten (und da jede Struktur als Kopf einer Liste betrachtet werden kann, ist es ein Array von SIZE-Listen oder es kann ein Array mit Zeigern auf verschiedene Elemente derselben Liste sein hängt davon ab, wie Sie es verwenden) – frarugi87
@ frarugi87 Warum deklariert 'int x;' einen Zeiger auf ein int namens x ohne einen Pointee, während 'Node * hashtable [SIZE];' ein Array von SIZE Zeigern deklariert, die auf 'Node' zeigen ('Node' ist der Anstoß)? – gabece