Share via


Operatore Address-of: &

Sintassi

address-of-expression:
& cast-expression

Osservazioni:

L'operatore unario address-of (&) restituisce l'indirizzo di (ovvero un puntatore a) del relativo operando. L'operando dell'operatore address-of può essere un designatore di funzione o un lvalue che fa riferimento a un oggetto che non è un campo di bit.

L'operatore address-of può essere applicato solo a determinate espressioni lvalue: a variabili di tipi fondamentali, struttura, classi o unioni o a riferimenti di matrice pedice. In queste espressioni, un'espressione costante (una che non include l'operatore address-of) può essere aggiunta o sottratta dall'espressione address-of.

Se applicato a funzioni o lvalue, il risultato dell'espressione è un tipo di puntatore (rvalue) derivato dal tipo dell'operando. Ad esempio, se l'operando è di tipo char, il risultato dell'espressione è di tipo puntatore a char. L'operatore address-of, applicato a const oggetti o , restituisce const type * o volatile type *volatile , dove type è il tipo dell'oggetto originale.

È possibile accettare l'indirizzo di una funzione di overload solo quando è chiaro a quale versione della funzione viene fatto riferimento. Per altre informazioni su come ottenere l'indirizzo di una determinata funzione di overload, vedere Overload delle funzioni.

Quando l'operatore address-of viene applicato a un nome completo, il risultato dipende dal fatto che il nome qualificato specifichi un membro statico. Se il membro è statico, il risultato è un puntatore al tipo specificato nella dichiarazione del membro. Per un membro che non è statico, il risultato è un puntatore al nome del membro della classe indicato da qualified-class-name. Per altre informazioni su qualified-class-name, vedere Espressioni primarie.

Esempio: Indirizzo del membro statico

Il frammento di codice seguente mostra come il risultato dell'operatore address-of varia, a seconda che un membro della classe sia statico:

// expre_Address_Of_Operator.cpp
// C2440 expected
class PTM {
public:
    int iValue;
    static float fValue;
};

int main() {
   int   PTM::*piValue = &PTM::iValue;  // OK: non-static
   float PTM::*pfValue = &PTM::fValue;  // C2440 error: static
   float *spfValue     = &PTM::fValue;  // OK
}

In questo esempio l'espressione &PTM::fValue contiene il tipo float * anziché il tipo float PTM::* perché fValue è un membro statico.

Esempio: Indirizzo di un tipo riferimento

L'applicazione dell'operatore address-of a un tipo riferimento restituisce lo stesso risultato dell'applicazione dell'operatore all'oggetto cui il riferimento è associato. Ad esempio:

// expre_Address_Of_Operator2.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main() {
   double d;        // Define an object of type double.
   double& rd = d;  // Define a reference to the object.

   // Obtain and compare their addresses
   if( &d == &rd )
      cout << "&d equals &rd" << endl;
}
&d equals &rd

Esempio: Indirizzo della funzione come parametro

Nell'esempio seguente viene utilizzato l'operatore address-of per passare un argomento di un puntatore a una funzione:

// expre_Address_Of_Operator3.cpp
// compile with: /EHsc
// Demonstrate address-of operator &

#include <iostream>
using namespace std;

// Function argument is pointer to type int
int square( int *n ) {
   return (*n) * (*n);
}

int main() {
   int mynum = 5;
   cout << square( &mynum ) << endl;   // pass address of int
}
25

Vedi anche

Espressioni con operatori unari
Operatori, precedenza e associatività predefiniti C++
Dichiaratore di riferimento Lvalue: &
Operatori di riferimento indiretto e indirizzo