Adresse des Operators: &
Syntax
address-of-expression
:
&
cast-expression
Hinweise
Der unäre Operator () gibt die Adresse des Operanden (&
d. h. einen Zeiger auf) zurück. Der Operand des Operatoradressen kann ein Funktionsdesignator oder ein Wert sein, der sich auf ein Objekt bezieht, das kein Bitfeld ist.
Die Adresse des Operators kann nur auf bestimmte lvalue-Ausdrücke angewendet werden: entweder auf Variablen von grundlegenden, Struktur-, Klassen- oder Union-Typen oder auf tiefgestellte Arrayverweise. In diesen Ausdrücken kann ein konstanter Ausdruck (ein Ausdruck, der die Adresse des Operators nicht enthält) der Adresse des Ausdrucks hinzugefügt oder subtrahiert werden.
Bei Anwendung auf Funktionen oder lvalues ist das Ergebnis des Ausdrucks ein Zeigertyp (ein Wert), der vom Typ des Operanden abgeleitet ist. Wenn der Operand z. B. vom Typ char
ist, ist das Ergebnis des Ausdrucks vom Typ Zeiger auf char
. Die Adresse des Operators, der auf const
Objekte angewendet oder volatile
angewendet wird, wird ausgewertet const type *
oder volatile type *
, wobei type
der Typ des ursprünglichen Objekts ist.
Sie können die Adresse einer überladenen Funktion nur übernehmen, wenn klar ist, auf welche Version der Funktion verwiesen wird. Weitere Informationen zum Abrufen der Adresse einer bestimmten überladenen Funktion finden Sie unter Funktionsüberladung.
Wenn die Adresse des Operators auf einen qualifizierten Namen angewendet wird, hängt das Ergebnis davon ab, ob der qualifizierte Name ein statisches Element angibt. Wenn dies der Fall ist, ist das Ergebnis ein Zeiger auf den Typ, der in der Deklaration des Members angegeben wird. Für ein Element, das nicht statisch ist, ist das Ergebnis ein Zeiger auf den Membernamen der Klasse, die durch qualifizierten Klassennamen angegeben ist. Weitere Informationen zu qualifiziertem Klassennamen finden Sie unter "Primäre Ausdrücke".
Beispiel: Adresse des statischen Elements
Das folgende Codefragment zeigt, wie sich das Adress-of-Operator-Ergebnis unterscheidet, je nachdem, ob ein Klassenelement statisch ist:
// 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 diesem Beispiel ergibt der Ausdruck &PTM::fValue
den Typ float *
anstelle von Typ float PTM::*
, da fValue
ein statischer Member ist.
Beispiel: Adresse eines Referenztyps
Die Anwendung des address-of-Operators auf einen Referenztyp führt zum gleichen Ergebnis wie die Anwendung des Operators auf das Objekt, an das der Verweis gebunden ist. Beispiel:
// 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
Beispiel: Funktionsadresse als Parameter
Im folgenden Beispiel wird der address-of-Operator benutzt, um ein Zeigerargument an eine Funktion zu übergeben:
// 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
Siehe auch
Ausdrücke mit unären Operatoren
Integrierte C++-Operatoren, Rangfolge und Zuordnung
Lvalue-Referenz-Deklarator: &
Dereferenzierung und Adressierung von Operatoren
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für