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 *가 정적 멤버이기 때문에 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;
}
&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
}
25

참고 항목

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