Ciao a tutti,
avrei bisogno di un grosso aiuto riguardante i vari passi che permettono di costruire una lista.
Ho già scritto diversi programmi con l'uso di liste ma diciamo che non mi sono mai fermato a pensare bene al codice, lo davo per scontato e questo è un errore.
Diciamo che ci sono alcuni passaggi che mi sono poco chiari e che spero possiate chiarirmeli.
Dopo aver creato una struttura
codice:
struct list {
int dim;
struct list *next;
};
per mia comodità rinomino la struttura appena creata in "lista"
codice:
typedef struct list *lista;
ma con questa operazione dico che il tipo lista è un puntatore a se stesso, e francamente non riesco a capire perchè.
Come primo elemento di una lista non basterebbe scrivere solo
codice:
typedef struct list lista l1;
La seconda cosa che non riesco a capire (la più importante) riguarda il processo che mi consente di creare un nuovo elemento della lista.
Mettiamo il caso che io lavori all'interno della funzione creaLista e che mi debba creare un certo numero di elementi (passato come parametro).
codice:
lista creaLista(int a) {
//vario codice...
lista l = (lista) malloc (typedef(lista)); // <-- questa è la riga incriminata
lista l->next = ...;
return ...;
}
io dico questo:
-dichiaro l che è un puntatore a lista.
-tramite la funzione malloc occupo un certo numero di byte e faccio tornare l'indirizzo del primo byte dello spazio occupato che poi assegnerò a l.
ed adesso?
per quanto ne so io adesso l punta ad una certa locazione, ma come faccio a sapere con certezza che lo spazio riservato da malloc contiene effettivamente una variabile intera ed una puntatore??
Scusate la domanda forse troppo banale, ma non voglio correre il rischio di avere dei dubbi sui puntatori visto che saranno argomento di tutti i giorni.
Devo essere più preparato possibile.
Grazie