Una struttura è un inseme di variabili raggruppate e raggiungibili con un unico identificativo...
Ad esempio:
Codice:
struct x {
int a;
char c;
};
/*Se dichiari*/
struct x variabile:
variabile.a permette di lavorare su a, variabile.c permette di lavorare su c... E qui non ci dovrebbero essere difficoltà...
Devi mettere la parola struct ogni volta che chiami in causa il tipo x (ad esempio sizeof(struct x))...
Se vuoi omettere la parola struct devi usare typedef...
typedef struct x tipox;
A questo punto puoi usare tipox come un qualsiasi tipo di variabile...omettendo struct...
Oppure si può fare anche:
Codice:
typedef struct x {
int a;
char c;
} tipox;
Per i puntatori...fanno male ad introdurli con le strutture dati perchè in teoria sarebbe meglio parlarne prima...
Un puntatore è un variabile atta a contenere un indirizzo di memoria che contiene una variabile di un determinato tipo...
In questo caso entrano in gioco gli l'operatori & e *...
& permette di ottenere l'indirizzo a cui è contenuta un carta variabile (ricordati che anche un puntatore è una variabile ed è memorizzato ad un certo indirizzo di memoria)...
Ad esempio:
tipox a;
&a; /*ottiene l'indirizzo a partire da cui è memorizzata a*/
&a.c; /*ottiene l'indirizzo a partire da cui è memorizzata a.c*/
* ha due incarnazioni anche nettamente separate...
La prima è quella che serve per dichiarare un puntatore:
int * p;
dichiara una variavbile p di tipo int *... Il tipo int * è un puntatore a una variabile di tipo int...o meglio p sarà atta a contenere indirizzi di memoria di variabili di tipo int...
Codice:
int a, *p, b; /*dichiaro due interi a e b ed un puntatore a intero p*/
a = 5;
p = &a; /*p uguale l'indirizzo di a - p punta ad a*/
Ora entra in gioco l'altra funzionalità di *... * applicato ad un puntatore permette di raggiungere l'area di memoria puntata dal puntatore:
Codice:
/*partendo dalla situazione predente*/
*p = 6;
/*in pratica assegno alla cella di memoria il cui indirizzo è
contenuto in p il valore 6*/
b = *p;
/*assegno a b il contenuto dell'area di memoria puntata da p*/
In pratica a questo punto a contiene 6 e b contiene il contenuto dell'intero puntato da p...cioè 6...
Applicando i puntatori alel strutture possiamo parlare dell'operatore ->
Codice:
tipox a, *p;
*p = &a; /*stessa cosa, come prima, solo che qui a è una
struttura*/
(*p).c = 'x';
/*raggiungo il contenuto dell'area di memoria puntata da p con
*p...dato che una struct posso ottenere l'elemento c con l'aiuto
dell'operatore . */
p->c = 'y';
/*è equivalente all'operazione sopra !!! -> permette di
raggiungere direttamente (senza la notazione sopra) il membro
della struttura puntata da p */
Fammi sapere se hai capito