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
Precedenza e associatività di operatore
Dichiarazione di riferimento Lvalue: &