Freigeben über


Adresse-Von Operator: &.

& cast-expression

Hinweise

Unäre Adressoperator (&) erhält die Adresse seines Operanden.Der Operand Adressoperator kann es sich entweder um einen Funktionsbezeichner oder ein L-Wert sein, der ein Objekt festgelegt wird, das nicht über ein Bitfeld ist und nicht mit dem Register Speicherklassenspezifizierer deklariert ist.

Adressoperator kann auf Variablen mit dem Struktur, Klasse oder - Union-Typen erstellt, die auf der Dateigültigkeitsbereichs Anwendungsebene deklariert werden, oder zum Verweisen auf den indizierten Arrays nur angewendet werden.In diesen Ausdrücken kann ein konstanter Ausdruck, der den Adressoperator enthält, nicht hinzugefügt oder aus ADDRESS expression subtrahiert werden.

Wenn es auf Funktionen oder L-Werten angewendet wird, lautet das Ergebnis des Ausdrucks ein Zeigertyp (einem R-Wert) abgeleitet vom Typ des Operanden.Wenn beispielsweise der Operand vom Typ charist, lautet das Ergebnis des Ausdrucks vom Typ pointer zu char.Adressoperator angewendet, const oder volatile-Objekten, ergibt const type * oder volatile type *****aus, wobei type der Typ des ursprünglichen Objekts ist.

Wenn Adressoperator zu qualifizierter Nameangewendet wird, hängt das Ergebnis davon ab, ob der qualifizierte 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.Wenn der Member nicht statisch ist, ist das Ergebnis ein Zeiger auf den Membernamen der Klasse, die von Qualifizierte-Klasse NAMEangegeben wird.(Siehe Primäre Ausdrücke für mehr über Qualifizierte-Klasse NAME.) Das folgende Codefragment zeigt, wie das Ergebnis unterscheidet, je nachdem, ob es sich bei dem Member um 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 wird der Ausdruck &PTM::fValue-Typ float * anstelle des Typs float PTM::* , da fValue ein statischer Member entspricht.

Die Adresse einer überladenen Funktion kann verwendet werden, wenn sie nur ersichtlich ist, welche Version der Funktion verwiesen wird.Weitere Informationen finden Sie unter Adresse von überladenen Funktionen Informationen darüber, wie die Adresse einer bestimmten überladenen Funktion abruft.

Durch die Anwendung den Adressoperator zu einem Referenztyp gibt das gleiche Ergebnis wie der Operator, Anwenden des Objekts, auf das der Verweis gebunden ist.Beispiele:

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;
}

Output

&d equals &rd

Das folgende Beispiel veranschaulicht den Adressoperator - Argument, um ein Zeiger auf eine Funktion übergeben wird:

// 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
}

Output

25

Siehe auch

Referenz

Ausdrücke mit unären Operatoren

C++-Operatoren

Operatorrangfolge und Assoziativität

Lvalue-Bezugsdeklarator: &.

Konzepte

Dereferenzierung und Adresse-Von Operators