Sono definiti tre diversi operatori per le operazioni con puntatori:
L'operatore
&Ha l'impiego seguente:
#include<stdio.h>
int main(int argc , char *argv[])
{
int *miopunt_intero;
int mioint = 7;
miopunt_intero = &mioint;
printf("%x", &miopunt_intero );
}/* main */
Questo breve programma stampa, sul mio sistema: bffff974 Ovvero, l'indirizzo di memoria in cui è conservata la variabile
mioint.
L'operatore di dereferenziazione
*serve, invece, per passare dal puntatore all'oggetto puntato in memoria.
1 #include<stdio.h>
2
3 int main(int argc , char *argv[])
4 {
5
6 int *miopunt_intero;
7 int mioint = 7;
8 miopunt_intero = & mioint;
9
10 printf("%x", &miopunt_intero );
11 }
Il codice sopra stampa: 7
Il terzo operatore (operatore freccia)
->é utile per fare riferimento agli elementi di una struct puntata; per es., se si é definita la struct:
struct indirizzo{
char citta[128];
char via[128];
int civico[5];
}
struct indirizzo mioind;
ed un puntatore alla struct:
struct indirizzo *punt; punt = & mioind;
si può accedere agli elementi della struct facendo:
mia_citta = punt-> citta; mia_via = punt-> via; mia_citta = punt-> civico;
Si noti che l'operatore -> equivale alla dereferenziazione del puntatore a struct, più il passaggio all'elemento; ovvero:
(* punt).citta;equivale a:
punt -> citta;
L'operatore -> viene spesso utilizzato nelle linked lists per accedere, come pure avremo modo di mostrare nel seguito, ai singoli campi di struct puntate da appositi puntatori; questi saranno, ovviamente, puntatori a struct.