Sdílet prostřednictvím


Operátor adresy: &

Syntaxe

address-of-expression:
& cast-expression

Poznámky

Unární operátor (&) vrátí adresu (tj. ukazatel na) svého operandu. Operand operátoru adresy může být designátor funkce nebo lvalue, který odkazuje na objekt, který není bitové pole.

Operátor adresy lze použít pouze u určitých výrazů lvalue: buď u proměnných základních typů, struktur, tříd nebo sjednocení, nebo u odkazů na pole s dolním indexem. V těchto výrazech lze konstantní výraz (který neobsahuje operátor address-of) přidat nebo odečíst z adresy výrazu.

Při použití u funkcí nebo lvalue je výsledkem výrazu typ ukazatele (rvalue) odvozený z typu operandu. Pokud je například operand typu char, výsledek výrazu je ukazatel na chartyp . Operátor adresy použitý na const objekty nebo volatile objekty const type * se vyhodnotí jako typ původního objektu nebo volatile type *kde type je typ původního objektu.

Adresu přetížené funkce můžete vzít jenom tehdy, když je jasné, na jakou verzi funkce se odkazuje. Další informace o tom, jak získat adresu konkrétní přetížené funkce, naleznete v tématu Přetížení funkce.

Pokud se na kvalifikovaný název použije operátor adresy, výsledek závisí na tom, jestli kvalifikovaný název určuje statický člen. Pokud ano, výsledek je ukazatel na typ zadaný v deklaraci členu. U člena, který není statický, je výsledkem ukazatel na název člena třídy označené kvalifikovaným názvem třídy. Další informace o názvu kvalifikované třídy naleznete v tématu Primární výrazy.

Příklad: Adresa statického člena

Následující fragment kódu ukazuje, jak se výsledek operátoru adresy liší v závislosti na tom, jestli je člen třídy statický:

// 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á místo typu typ float * float PTM::* , protože fValue je statický člen.

Příklad: Adresa typu odkazu

Použití operátoru adresy na typ odkazu dává stejný výsledek jako použití operátoru na objekt, na který je odkaz vázán. 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;
}
&d equals &rd

Příklad: Adresa funkce jako parametr

Následující příklad používá operátor address-of k předání argumentu ukazatele do funkce:

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

Viz také

Výrazy s unárními operátory
Integrované operátory jazyka C++, priorita a asociativita
Deklarátor odkazu Lvalue: &
Nepřímé a adresní operátory