Operator address-of: &
Składnia
address-of-expression
:
&
cast-expression
Uwagi
Jednoargumentowy operator&
() zwraca adres (czyli wskaźnik) jego operand. Operand operatora address-of może być projektantem funkcji lub wartością lvalue odwołującą się do obiektu, który nie jest polem bitowym.
Operator address-of może być stosowany tylko do niektórych wyrażeń lvalue: do zmiennych podstawowych, struktury, klas lub typów unii albo do odwołań do tablicy w indeksie dolnym. W tych wyrażeniach można dodać wyrażenie stałe (które nie zawiera operatora address-of) lub odjąć je od wyrażenia address-of.
W przypadku zastosowania do funkcji lub wartości l wynik wyrażenia jest typem wskaźnika (rvalue) pochodzącym z typu operandu. Jeśli na przykład operand ma typ char
, wynik wyrażenia jest wskaźnikiem typu .char
Operator address-of, zastosowany do const
obiektów lub volatile
, daje wartość lub const type *
volatile type *
, gdzie type
jest typem oryginalnego obiektu.
Adres przeciążonej funkcji można pobrać tylko wtedy, gdy jest jasne, do której wersji funkcji odwołuje się odwołanie. Aby uzyskać więcej informacji na temat uzyskiwania adresu konkretnej przeciążonej funkcji, zobacz Przeciążanie funkcji.
Po zastosowaniu operatora address-of do kwalifikowanej nazwy wynik zależy od tego, czy kwalifikowana nazwa określa statyczny element członkowski. Jeśli tak, wynik jest wskaźnikiem do typu określonego w deklaracji elementu członkowskiego. W przypadku elementu członkowskiego, który nie jest statyczny, wynik jest wskaźnikiem do nazwy składowej klasy wskazanej przez kwalifikowaną nazwę klasy. Aby uzyskać więcej informacji na temat kwalifikowanej nazwy klasy, zobacz Wyrażenia podstawowe.
Przykład: adres statycznego elementu członkowskiego
Poniższy fragment kodu pokazuje, jak wynik operatora address-of różni się w zależności od tego, czy składowa klasy jest statyczna:
// 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
}
W tym przykładzie wyrażenie &PTM::fValue
zwraca typ float *
zamiast typu float PTM::*
, ponieważ fValue
jest statycznym elementem członkowskim.
Przykład: adres typu odwołania
Zastosowanie operatora address-of do typu odwołania daje taki sam wynik, jak zastosowanie operatora do obiektu, do którego odwołanie jest powiązane. Przykład:
// 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
Przykład: Adres funkcji jako parametr
W poniższym przykładzie użyto operatora address-of, aby przekazać argument wskaźnika do funkcji:
// 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
Zobacz też
Wyrażenia z operatorami jednoargumentowymi
Wbudowane operatory, pierwszeństwo i kojarzenie języka C++
Deklarator odwołań Lvalue: &
Operatory pośrednie i adresowe
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla