Condividi tramite


l'operatore address-of: &

& cast-expression

Note

L'operatore address-of (unario&) accetta 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.

L'operatore address-of può essere applicato solo alle variabili con la base, struttura, classi, o 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 da l expression.

Se applicato alle funzioni o i valori l-value solo, il risultato dell'espressione è un tipo di puntatore (un r-value) 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 o volatile gli oggetti, restituisce const type * o volatile type *, dove type è il tipo dell'oggetto originale.

Quando l'operatore address-of viene applicata a un oggetto nome completo, il risultato dipende da l nome completo specifica un membro statico.In tal caso, il risultato è un puntatore al tipo specificato nella dichiarazione del membro.Se il membro non statico, il risultato è un puntatore a membro nome la classe descritta da qualificare-classe-nome.(Vedere Espressioni principali per ulteriori informazioni su qualificare-classe-nome). Nel codice seguente viene illustrato come il risultato è diverso, a seconda che il membro 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 tipo di conterrà float * invece di tipo float PTM::* poiché fValue è un membro statico.

L'indirizzo di una funzione in overload può essere eseguito solo quando è chiaro che la versione della funzione riferimento interessa.vedere Indirizzo delle funzioni in overload per informazioni su come ottenere l'indirizzo di una funzione in overload specifico.

Applicando l'operatore address-of a un tipo di riferimento fornisce stesso risultato ottenuto applicando l'operatore a cui il riferimento è associato.Di seguito è riportato un esempio:

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;
}

Output

&d equals &rd

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
}

Output

25

Vedere anche

Riferimenti

Espressioni con gli operatori unari

Operatori di C++

Precedenza e associatività di operatore

Dichiarazione di riferimento Lvalue: &

Concetti

Riferimento indiretto e l'Operators