Riferimento indiretto e l'Operators
l'operatore di riferimento indiretto (*) accede indirettamente un valore, tramite un puntatore.L'operando deve essere un valore del puntatore.Il risultato dell'operazione è il valore indirizzato dall'operando; ovvero il valore all'indirizzo cui il suo operando indica.Il tipo del risultato è il tipo che gli indirizzi di operando.
Se i punti di operando a una funzione, il risultato è un indicatore di funzione.Se indica un percorso di archiviazione, il risultato è un l-value che definisce il percorso di archiviazione.
Se il valore del puntatore non è valido, il risultato sarà indefinito.Nell'elenco include alcune circostanze più comuni che invalidano un valore del puntatore.
il puntatore è un puntatore null.
Il puntatore specifica l'indirizzo di un elemento locale non visibile al momento del riferimento.
Il puntatore specifica un indirizzo in cui viene allineato appropriato per il tipo di oggetto puntato.
Il puntatore specifica un indirizzo non utilizzato da un programma in esecuzione.
L'operatore address-of (&) fornisce l'indirizzo del suo operando.L'operando dell'operatore address-of può essere un indicatore di funzione o un l-value che definisce un oggetto che non è un campo di bit e non è dichiarato con il registro identificatore classe di archiviazione.
Il risultato dell'operazione di indirizzo è un puntatore all'operando.Il tipo utilizzato dal puntatore è il tipo dell'operando.
L'operatore address-of può essere applicato solo alle variabili con la base, la struttura, o i tipi di unione che vengono dichiarati a livello di ambito file, o ai riferimenti alla matrice formattati.In queste espressioni, un'espressione costante che non include l'operatore address-of può essere aggiunto a o essere sottratta dall'espressione di indirizzo.
Esempi
Negli esempi seguenti vengono utilizzate queste dichiarazioni:
int *pa, x;
int a[20];
double d;
Questa istruzione utilizza l'operatore address-of:
pa = &a[5];
L'operatore address-of (&) accetta l'indirizzo del sesto elemento della matrice in.Il risultato viene memorizzato nella variabile puntatore pa.
x = *pa;
l'operatore di riferimento indiretto (*) in questo esempio viene utilizzata per accedere a int valore all'indirizzo archiviato in pa.Il valore viene assegnato alla variabile Integer x.
if( x == *&x )
printf( "True\n" );
L'esempio visualizza la parola True, e che il risultato di applicare l'operatore di riferimento indiretto all'indirizzo di x è uguale a x.
int roundup( void ); /* Function declaration */
int *proundup = roundup;
int *pround = &roundup;
una volta la funzione roundup viene dichiarato, due puntatori a roundup vengono dichiarati e inizializzati.il primo puntatore, proundup, viene inizializzata utilizzando solo il nome della funzione, mentre il secondo, pround, utilizza l'operatore address-of nell'inizializzazione.le inizializzazioni sono equivalenti.