View Full Version : [C] Problema con le strutture
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?
e se scrivo:
data x;
x sarà una variabile di tipo data come da me definita, ho capito bene?
Ora, ho visto che a volte viene abbrievieta in questo modo:
typedef struct data {
int valore;
char nome[];
}x;
Ottengo lo stesso risultato?
Poi infine, se scrivo:
typedef struct {
int valore;
char nome[];
}data;
cosa ottengo?Ho notato anche che viene usaata quest'ultima notazione a volte...
grazie :confused:
ilsensine
20-03-2006, 15:19
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?
No. Quella dichiarazione dichiara solo la "struct data". Nessun typedef è definito, in quanto manca il nome da assegnare al typedef.
e se scrivo:
data x;
x sarà una variabile di tipo data come da me definita, ho capito bene?
Se la dichiarazione è quella che hai indicato, questa istanza di x dovrebbe generare un errore in compilazione. E' corretto scrivere qui
struct data x;
Ora, ho visto che a volte viene abbrievieta in questo modo:
typedef struct data {
int valore;
char nome[];
}x;
Non è una abbreviazione, è il modo corretto di creare un typedef. Qui ora puoi accedere ai tipi
struct data
e "x" (che è un typedef del precedente). Puoi scrivere ovvero indifferentemente
struct data myvar;
oppure
x myvar;
Poi infine, se scrivo:
typedef struct {
int valore;
char nome[];
}data;
cosa ottengo?
Lo stesso del caso precedente; solo che la struct è ora "anonima". "data" qui è il typedef.
Grazie sei stato velocissimo.
Allora il metodo corretto è questo se ho capito bene, la parola che ho messo in grassetto si chiama etichetta della struttura giusto? e non sempre sembra essere necessaria, allora ti chiedo, quando la devo mettere e quando no?
typedef struct data {
int valore;
char nome[];
}x;
ilsensine
20-03-2006, 15:30
Grazie sei stato velocissimo.
Allora il metodo corretto è questo se ho capito bene, la parola che ho messo in grassetto si chiama etichetta della struttura giusto? e non sempre sembra essere necessaria, allora ti chiedo, quando la devo mettere e quando no?
typedef struct data {
int valore;
char nome[];
}x;
A tua discrezione. Nota che puoi anche scrivere, come fanno alcuni,
typedef struct data {
int valore;
char nome[];
} data;
Ma ti spiego, sto studiando le liste, e vengono utilizzate le strutture tutte definite senza omettere l'etichetta, c'è un motivo?
ilsensine
20-03-2006, 15:40
Ah sì; le liste sono forse l'unico caso dove è obbligatorio utilizzare una struttura non anonima. Questo perché non puoi usare il tipo definito nel typedef durante...la sua dichiarazione.
Questo ad esempio è legale:
typedef struct data {
int x;
struct data *prev, *next;
} data;
Anche questo è legale:
struct data {
int x;
struct data *prev, *next;
};
Questo _non_ è legale:
typedef struct {
int x;
data *prev, *next;
} data;
e neanche questo è legale:
typedef struct data {
int x;
data *prev, *next;
} data;
Capito! grazie mi sei stato di grande aiuto! :p
deep_inside
20-03-2006, 20:31
mmmm... anche io sto studiando le le liste (ora gli alberi in realtà)...
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.