Originariamente inviato da Linusss
Ciao a tutti, vi chiedo di chiarirmi una cosa che per voi sarà sicuramente banale!
Allora quando io definisco una struttura, per esempio:
typedef struct data {
int valore;
char nome[];
}

dopo io ho un nuovo tipo che si chiama data giusto?
Sbagliato ...

Non hai definito un nuovo tipo, quello lo fai con la typedef.

Disponi di una struttura dati con cui poter dichiarare delle variabili. Ovvero puoi scrivere

struct data var;

Originariamente inviato da Linusss
e se scrivo:
data x;
x sarà una variabile di tipo data come da me definita, ho capito bene?
No ... anche questo e' sbagliato.

Se non utilizzi la typedef per definire un nuovo tipo di dato (la tua struttura), non la puoi utilizzare per dichiarare una variabile ... quindi non puoi scrivere

data var;

ma, come ti ho detto prima,

struct data var;

Originariamente inviato da Linusss
Ora, ho visto che a volte viene abbrievieta in questo modo:
typedef struct data {
int valore;
char nome[];
}x;

Ottengo lo stesso risultato?
Questa non e' una abbreviazione. Con la typedef hai effettuato la dichiarazione di un altro tipo di dato, che chiami x e che e' la tua struct data. A questo punto esiste un nuovo tipo di dato con cui puoi dichiarare una variabile, ad esempio

x var;

tale variabile sara' di tipo struct data

Originariamente inviato da Linusss
Poi infine, se scrivo:
typedef struct {
int valore;
char nome[];
}data;
cosa ottengo?Ho notato anche che viene usaata quest'ultima notazione a volte...
Come quella precedente tranne che il nuovo tipo di dato si chiama data (e non x) e la struttura e' "anonima" (e' possibile dato che la definisci e usi come tipo) ... Adesso puoi dichiarare una variabile con

data var;