Operatore di riferimento indiretto: *

Sintassi

* cast-expression

Osservazioni:

L'operatore di riferimento indiretto unario (*) dereferenzia un puntatore, ovvero converte un valore puntatore in un l-value. L'operando dell'operatore di riferimento indiretto deve essere un puntatore a un tipo. Il risultato dell'espressione di riferimento indiretto è il tipo da cui il tipo di puntatore è derivato. L'uso dell'operatore * in questo contesto è diverso dal suo significato come operatore binario, che è moltiplicazione.

Se l'operando punta a una funzione, il risultato è un indicatore di funzione. Se invece punta a un percorso di archiviazione, il risultato è un valore l-value che definisce il percorso di archiviazione.

L'operatore di riferimento indiretto può essere utilizzato in modo cumulativo per dereferenziare i puntatori ai puntatori. Ad esempio:

// expre_Indirection_Operator.cpp
// compile with: /EHsc
// Demonstrate indirection operator
#include <iostream>
using namespace std;
int main() {
   int n = 5;
   int *pn = &n;
   int **ppn = &pn;

   cout  << "Value of n:\n"
         << "direct value: " << n << endl
         << "indirect value: " << *pn << endl
         << "doubly indirect value: " << **ppn << endl
         << "address of n: " << pn << endl
         << "address of n via indirection: " << *ppn << endl;
}

Se il valore del puntatore non è valido, il risultato sarà indefinito. Nell'elenco seguente sono incluse alcune delle situazioni 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 allineato in modo non appropriato per il tipo di oggetto cui fa riferimento.

  • Il puntatore specifica un indirizzo non utilizzato dal programma di esecuzione.

Vedi anche

Espressioni con operatori unari
Operatori C++, precedenza e associazione
Operatore address-of: &
Operatori address-of e di riferimento indiretto