Sdílet prostřednictvím


Operátor z adresy: &

& cast-expression

Poznámky

Adresa tohoto unárního operátoru (a) trvá adresu jeho operand.Funkce odpoledne nebo l hodnota, která určuje objekt, který není bitové pole a není deklarována pomocí může být operand operátoru adresu z zaregistrovat specifikátoru třídy úložiště.

Operátor o adresu lze použít pouze proměnné se strukturou základních, třídy, nebo subscripted unie typy, které jsou deklarovány na úrovni oboru souboru nebo do pole odkazy.V těchto výrazů můžete přidán do konstantní výraz, který neobsahuje adresu z operátor nebo odečteny od výraz z adresy.

Při použití funkce nebo hodnoty l, výsledek výrazu je odvozen typ ukazatele (hodnota) z typ operandu.Například operand je typu char, je výsledkem výrazu typ ukazatele na char.Operátor z adresy, u const nebo volatile objekty, jehož výsledkem consttype***** nebo volatiletype*****, kde type je typ objektu.    

Když u operátora z adresy kvalifikovaný název, výsledek závisí na tom, zda kvalifikovaný název Určuje statický člen.Pokud ano, výsledkem je ukazatel na typ zadaný v prohlášení člena.Pokud člen není statická, výsledek je ukazatel myši na člen název třídy podle kvalifikovaný název třídy.(Viz Primární výrazy Další informace o kvalifikovaný název třídy.) Následující fragment kódu ukazuje, jak výsledek liší v závislosti na tom, zda je statický člen:

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

V tomto příkladu výraz &PTM::fValue dává typu float * místo typu float PTM::* protože fValue je statický člen.

Adresa přetížené funkce mohou být převzaty pouze v případě, že je jasné, odkazuje verze funkce.Viz Adresa přetížené funkce informace o tom, jak získat adresu příslušné přetížené funkce.

Použití operátoru adresu z typu odkazu dává stejného výsledku jako při použití operátoru k objektu, ke kterému je vázán referenční.Příklad:

Příklad

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

Výsledek

&d equals &rd

Následující příklad používá operátor z adres předat argument ukazatele na funkci:

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

Výsledek

25

Viz také

Referenční dokumentace

Výrazy s unární operátory

Operátory C++

Přednost a asociativita operátorů

Odkaz Lvalue Declarator: &

Koncepty

Nepřímé odkazování a operátory z adresy