Оператор взятия адреса: &

& 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

См. также

Ссылки

Выражения с унарными операторами

Операторы C++

Operator precedence and Associativity

Декларатор ссылки Lvalue: &

Основные понятия

Косвенность оператора взятия адреса и