Address-of 연산자: &

문법

address-of-expression:
& cast-expression

비고

단항 주소 연산자(&)는 피연산자의 주소(즉, 포인터)를 반환합니다. address-of 연산자의 피연산자는 비트 필드가 아닌 개체를 참조하는 함수 지정자 또는 lvalue일 수 있습니다.

address-of 연산자는 기본, 구조체, 클래스 또는 공용 구조체 형식의 변수 또는 아래 첨자 배열 참조와 같은 특정 lvalue 식에만 적용할 수 있습니다. 이러한 식에서는 상수 식(address-of 연산자를 포함하지 않는 식)을 식 주소 식에 추가하거나 뺄 수 있습니다.

함수 또는 lvalues에 적용된 경우 식의 결과는 피연산자 형식에서 파생된 포인터 형식(rvalue)입니다. 예를 들어 피연산자의 형식 char이면 식의 결과는 포인터 char형식입니다. 대상 또는 개체에 const 적용되는 address-of 연산자는 const type * 원래 개체의 형식을 계산하거나 volatile type *위치 type 로 계산 volatile 합니다.

참조되는 함수 버전이 명확할 때만 오버로드된 함수의 주소를 사용할 수 있습니다. 특정 오버로드된 함수의 주소를 가져오는 방법에 대한 자세한 내용은 함수 오버로드를 참조하세요.

주소 연산자가 정규화된 이름에 적용되는 경우 결과는 정규화된 이름이 정적 멤버를 지정하는지 여부에 따라 달라집니다. 이 경우 결과는 멤버 선언에 지정된 형식에 대한 포인터입니다. 정적이지 않은 멤버의 경우 결과는 정규화된 클래스 이름으로 표시된 클래스의 멤버 이름에 대한 포인터입니다. 정규화된 클래스 이름에 대한 자세한 내용은 기본 식을 참조하세요.

예: 정적 멤버의 주소

다음 코드 조각에서는 클래스 멤버가 정적인지 여부에 따라 연산자 주소 결과가 어떻게 다른지 보여 줍니다.

// 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 PTM::*float *fValue 을 생성합니다.

예: 참조 형식의 주소

참조 형식에 address-of 연산자를 적용하면 참조가 바인딩된 개체에 연산자를 적용하는 것과 동일한 결과를 얻을 수 있습니다. 다음은 그 예입니다.

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

예: 함수 주소를 매개 변수로

다음 예제에서는 address-of 연산자를 사용하여 함수에 포인터 인수를 전달합니다.

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

참고하십시오

단항 연산자가 있는 식
C++ 기본 제공 연산자, 우선 순위 및 결합성
Lvalue 참조 선언자: &
간접 참조 및 주소 연산자