Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Adressoperator:
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, der nicht den address-of-Operator einschließt, dem address-of-Ausdruck hinzugefügt oder von diesem subtrahiert werden.
Bei Anwendung auf Funktionen oder L-Werte ist das Ergebnis des Ausdrucks ein Zeigertyp (ein R-Wert), der vom Typ des Operanden abgeleitet wird. Wenn beispielsweise der Operand vom Typ char
ist, ist das Ergebnis des Ausdrucks ein Typzeiger auf char
. Der address-of-Operator, der auf const
oder volatile
-Objekte angewendet wird, hat den Wert 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 der address-of Operator auf einen qualifizierten Namen angewendet wird, hängt das Ergebnis davon ab, ob qualified-name einen statischen Member angibt. Wenn dies der Fall ist, ist das Ergebnis ein Zeiger auf den Typ, der in der Deklaration des Members angegeben wird. Für einen Member, der nicht statisch ist, ist das Ergebnis ein Zeiger auf den Member name der Klasse, die von qualified-class-name angegeben wird. Weitere Informationen zu qualified-class-name finden Sie unterPrimä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. Zum 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
Weitere Informationen
Ausdrücke mit unären Operatoren
In C++ integrierte Operatoren, Rangfolge und Assoziativität
Lvalue-Verweisdeklarator: &
Dereferenzierungs- und Address-of-Operatoren