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
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per