a dire il vero no, anzi fino ad ora non sapevo che esistessero :hatecomputer:
un esempio?
#define BUFFER_SIZE 4088
/* linked list of buffers, stores data as in the file */
struct buffer {
struct buffer *next;
unsigned char buf[BUFFER_SIZE];
};
struct smf_track {
int size; /* size of entire data */
int cur_buf_size; /* size of cur_buf */
struct buffer *cur_buf;
snd_seq_tick_time_t last_tick; /* end of track */
unsigned char last_command; /* used for running status */
int used; /* anything record on this track */
struct buffer first_buf; /* list head */
};
Questo genere di strutture si usa quando non sai a priori quanti dati avrai, e allora ti prendi memoria poco per volta, quando serve. Il primo dato viene "rintracciato" da un puntatore, che punta alla prima struttura. Dentro la prima struttura, oltre ai dati rilevanti, c'è un puntatore alla struttura successiva, e così via.
Vedi anche: http://it.wikipedia.org/wiki/Lista_concatenata (http://it.wikipedia.org/wiki/Lista_concatenata)