Adresa operátoru: &
& cast-expression
Poznámky
Unární operátor adresa (&) přebírá adresu svého operandu.Operand operátoru adresa může být označením funkce nebo l-hodnotou označující objekt, který se nachází mimo bitové pole a který není deklarován specifikátorem třídy úložiště register.
Operátor adresa lze použít pouze pro proměnné základních typů, struktur, tříd nebo sjednocení deklarovaných na úrovni oboru souboru nebo na indexované reference polí.V těchto výrazech lze konstantní výraz, který neobsahuje operátor adresa, přičíst nebo odečíst od výrazu adresy.
Při použití u funkcí nebo l-hodnot je výsledkem výrazu typ ukazatele (r-hodnota) odvozená od typu operandu.Je-li operand například typu char, je výsledek výrazu typu ukazatele na typ char.Operátor adresa použitý u objektů const nebo volatile je vyhodnocen jako const type * nebo volatile type *, kde type je typ původního objektu.
Je-li operátor adresa použit u kvalifikovaného názvu, výsledek závisí na tom, zda kvalifikovaný název určuje statický člen.Pokud ano, je výsledkem ukazatel na typ určený v deklaraci členu.Není-li člen statický, je výsledkem ukazatel na název členu třídy dané kvalifikovaným názvem třídy. (Další informace o kvalifikovaných názvech tříd naleznete v tématu Primární výrazy.) Následující část kódu ukazuje, jak se výsledky liší v závislosti na tom, zda je člen 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 je výraz &PTM::fValue vyhodnocen na typ float * namísto typu float PTM::*, protože člen fValue je statický.
Adresu přetížené funkce lze získat pouze v případě, že je jasné, která verze funkce je odkazována.Informace o způsobu získání adresy konkrétní přetížené funkce naleznete v tématu Adresa přetížených funkcí.
Použití operátoru adresa u typu reference dává stejný výsledek jako použití operátoru u objektu, s nímž je reference svázána.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 adresa k předání argumentu ukazatele 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
Operátory C++, priorita a asociativita