View Single Post
Old 13-06-2004, 10:24   #3
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
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
cionci è offline   Rispondi citando il messaggio o parte di esso