Nelle strutture grammaticali C sono definiti come segue
struct-o-union-specifier:
struct-o-union identificatore opt {struct-dichiarazione-list}
Quindi per riferirsi a questo identificatore di struttura è necessario usare il suo nome.
Si può dichiarare le variabili come segue
struct node
{
int data;
struct node *next;
} Node;
Qui Node
è un oggetto di tipo struct node
. A sua volta, struct node
è un identificatore di tipo della variabile Node
.
È possibile omettere l'identificatore in un identificatore di struttura. In questo caso la struttura si chiama struttura senza nome. Tuttavia, usando una tale struttura non è possibile fare riferimento ad essa stessa all'interno della sua definizione. Ad esempio, non è possibile scrivere
struct
{
int data;
struct *next;
^^^^^^^^^^^^^
} Node;
perché è sconosciuto quale struttura viene indicata qui.
È possibile utilizzare strutture senza nome come membri di altre strutture. In questo caso, una struttura di questo tipo è denominata struttura anonimo ei suoi membri diventano membri della struttura che lo ospita.
Ad esempio
struct A
{
struct
{
int x;
int y;
];
int z;
};
Questa struttura A
ha tre membri x
, y
e z
.
Quando viene utilizzato lo specificatore della classe di archiviazione, il dichiaratore è un identificatore che deve essere un nome typedef che indica il tipo specificato per l'identificatore.
Così in questo dichiarazione
typedef struct node
{
int data;
struct node *next;
} Node;
Node
non è già un oggetto. È un nome di tipo che indica il nodo struct.
Quindi, da ora è possibile utilizzare il tipo nome Node
invece del tipo specificatore struct node
tua struct è parte di un costrutto di solito chiamato "lista collegata". Cercalo se vuoi sapere come usarlo e perché hai scritto 'struct node * next'. Per quanto riguarda la tua domanda, con 'struct node {...};' nel tuo codice dovresti dichiarare variabili come 'struct node mynode1;'. Usando 'typedef struct node Node;' devi solo scrivere 'Node mynode1' – frarugi87
Penso che generi un errore ...' Node * hashtable [SIZE] ', dall'altra parte, genera una matrice con elementi SIZE; ognuno di essi è un puntatore a un nodo struct (e quindi, dal momento che ogni struct può essere considerata la testa di una lista, è una matrice di liste SIZE, oppure può essere una matrice con puntatori a vari elementi della stessa lista, dipende da come lo si usa) – frarugi87
@ frarugi87 Perché 'int x;' dichiara un puntatore a un int chiamato x senza un pointee, mentre 'Node * hashtable [SIZE];' dichiara una matrice di puntatori SIZE che puntano a 'Node' ('Node' è la punta)? – gabece