Adres z operatora: &
& cast-expression
Uwagi
Adres z Jednoargumentowy operator (&) ma adres jego operandu.Argument operatora z adresu może być w opisie funkcji lub l wartość, która wyznacza obiekt, który nie jest pole bitowe i nie jest zadeklarowana z zarejestrować Specyfikator klasy magazynowania.
Operator z adres mogą być stosowane tylko do zmiennych z podstawowych, struktury, klasy, lub typów Unii, które są zadeklarowane na poziomie zakresu pliku lub do subscripted odwołania do tablicy.W tych wyrażeniach wyrażenie stałe, która nie zawiera operator adres z można dodawać do lub odjęta od wyrażenia z adresu.
Po zastosowaniu funkcji lub wartości l, wynik wyrażenia typu wskaźnik (wartość) pochodzi od typu operandu.Na przykład, jeśli operand jest typu char, wynikiem wyrażenia jest typ wskaźnika do char.Operator z adresu, stosowane do const lub volatile obiektów, wynikiem jest consttype***** lub volatiletype*****, gdzie type jest typem obiektu oryginalnego.
Kiedy operator z adresu jest stosowany do kwalifikowana nazwa, wynik zależy od tego, czy kwalifikowaną nazwą Określa członka statycznego.Jeśli tak, to wynik jest wskaźnik z typem wyszczególnionym w deklaracji członka.Jeżeli członek nie jest statyczny, wynik jest wskaźnik do elementu Nazwa klasy wskazanej przez kwalifikowaną--Nazwa klasy.(Zobacz Wyrażenia podstawowe więcej informacji na temat kwalifikowaną--Nazwa klasy.) Następujący fragment kodu pokazuje, w jaki sposób wyniki różnią się w zależności od tego, czy jest statyczny:
// 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 daje typu float * zamiast typu float PTM::* ponieważ fValue jest członka statycznego.
Adres funkcji zastąpionej mogą być wykonywane tylko wtedy, gdy oczywiste jest to odwołanie do wersji funkcji.Zobacz Adres przeciążony funkcji Aby uzyskać informacje dotyczące sposobu uzyskiwania adresu określonego przeciążony funkcji.
Zastosowanie operatora adres z typem odwołania daje taki sam wynik jak stosowanie operatora do obiektu, z którym powiązany jest odwołanie.Na przykład:
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;
}
Dane wyjściowe
&d equals &rd
W poniższym przykładzie użyto operatora o adres do przekazania argument wskaźnik 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
}
Dane wyjściowe
25
Zobacz też
Informacje
Wyrażenia z operatory jednoargumentowe
Priorytet i łączność operatorów
Odwołanie lValue; niewłaściwy deklarator: &