Оператор взятия адреса: &
& cast-expression
Заметки
Унарные оператора взятия адреса (&) принимает адрес своего операнда.Операнд оператора взятия адреса может быть либо обозначителем функции или l-значением, которое определяет объект, который не является битового поля и не объявлен с регистр описатель хранени-класса.
Оператора взятия адреса может применяться только к переменным с принципу классом, структурой или типами соединения, объявленные на уровне файл-области или в subscripted ссылкам массива.В этих выражениях, константное выражение, которое не содержит оператора взятия адреса можно добавить к взятия адреса или вычесть из выражения.
При применении к функциям или l-значениям результат выражения типа указателя (r-значение), производный от типа операнда.например, если операнд типа charрезультат выражения указателей типа char.Оператора взятия адреса, примененного к Const OR volatile объекты имеют значение Const type * OR volatile type *, где type тип исходного объекта.
Если оператора взятия адреса применяется к a полное имя, зависит от результата, является ли квалифицировать-имя указывает на статический элемент.Если это так, то результат указатель к типу, указанному в объявлении члена.Если элемент не является статическим, результат указателя на член Имя класса, отображаемого by квалифицировать-класс-имя.(См. первичные выражения дополнительные сведения о квалифицировать-класс-имя.) В следующем фрагменте Кода показан результат отличается в зависимости от того, является ли элемент статическим.
// 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
}
В этом примере выражение &PTM::fValue создает тип float * вместо типа float PTM::* поскольку fValue статический элемент.
Адрес перегруженной функции может принимать только когда очевидно, ссылающиеся на версии функции.См. Адрес перегруженных функций сведения о том, как получить адрес частности перегружать функцию.
Применение оператора взятия адреса к ссылочному типу обеспечивает тот же результат, как применение оператора на объект, к которому привязана ссылка.Примеры.
Пример
// 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
В следующем примере с помощью оператора взятия адреса для передачи аргументов указателей на функции.
// 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
См. также
Ссылки
Выражения с унарными операторами
Operator precedence and Associativity