주소 연산자: &
& cast-expression
설명
단항 연산자의 주소 (및)는 피연산자의 주소를 사용 합니다.주소 연산자의 피연산자 함수 지정자 나는 비트 필드 이며으로 선언 된 개체를 지정 하는 i-값 중 하나가 될 수 있습니다 있는 등록 저장소 클래스 지정자입니다.
주소 연산자만 기본, 구조, 클래스를 사용 하 여 변수를 적용할 수 있습니다 또는 파일 범위 수준 또는 선언 된 공용 구조체 형식을 참조 배열 아래 첨자입니다.이러한 식에 주소 연산자를 포함 하지 않는 상수 식 수 수 가감 식에서 주소를 합니다.
함수 또는 l 값, 식의 결과를 적용 하면 포인터 형식 (r-value)는 피연산자의 형식에서 파생 됩니다.예를 들어, 피연산자의 형식이 char, 식의 결과 형식에 대 한 포인터는 char.적용은 주소 연산자를 const 또는 volatile 개체, 계산 consttype***** 또는 volatiletype*****, 어디 type 는 원래 개체의 유형입니다.
주소 연산자입니다 적용 경우에 정규화 된 이름, 결과 여부에 따라 다릅니다의 정규화 된 이름이 정적 멤버를 지정.이 경우 결과 멤버의 선언에 지정 된 형식에 대 한 포인터입니다.구성원이 정적 이면 결과 구성원에 대 한 포인터입니다. 이름 지정 된 클래스의 정규화 된 클래스 이름이.(참조 하십시오 기본 식 은 에 대 한 자세한 내용은 정규화 된 클래스 이름이입니다.) 다음 코드 단편은 어떻게 결과 멤버가 정적 인지 여부에 따라 다릅니다 보여 줍니다.
// 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