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 char
typ . 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
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro