Creare il primo nodo della lista in C
Nuovamente riscrivo un pezzo di codice in C riguardante la creazione del primo nodo della lista.
Dichiaro una struttura dove al'interno vi trovo un puntatore che nel caso del primo nodo di una lista è il puntatore al secondo nodo e il puntatore fa riferimento ad una struttura simile a quella in cui è contenuto. Volevo capire cosa fanno le tre istruzioni dopo la dichiarazione della struttura. Per quanto riguardo a p->value=10, sto dando il valore del primo nodo = 10 e dichiaro il puntatore= NULL perchè dopo il primo nodo non ci sono altri nodi.
Ho capito che con la scrittura p=(Nodo*)malloc(sizeof(Nodo)); sto allocando memoria per un elemento di tipo Nodo*;
struct nodo{ int value; struct nodo *next; } typedef struct nodo Nodo; Nodo *p; p=(Nodo*)malloc(sizeof(Nodo)); p->value=10; p->next=NULL;
Dichiaro una struttura dove al'interno vi trovo un puntatore che nel caso del primo nodo di una lista è il puntatore al secondo nodo e il puntatore fa riferimento ad una struttura simile a quella in cui è contenuto. Volevo capire cosa fanno le tre istruzioni dopo la dichiarazione della struttura. Per quanto riguardo a p->value=10, sto dando il valore del primo nodo = 10 e dichiaro il puntatore= NULL perchè dopo il primo nodo non ci sono altri nodi.
Ho capito che con la scrittura p=(Nodo*)malloc(sizeof(Nodo)); sto allocando memoria per un elemento di tipo Nodo*;
Risposte
malloc alloca un blocco di memoria il cui numero di byte è determinato dal suo unico argomento. In questo caso stai allocando abbastanza memoria per un Nodo (sizeof(Nodo) restituisce la dimensione in byte del Nodo). A questo punto restituisce un puntatore a questo blocco di memoria (è di tipo void*) che l'autore del codice ha convertito ad un puntatore a Nodo (Nodo *). In realtà non era affatto necessario in quanto la conversione da void * a qualsiasi altro puntatore è automatica.