Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ 포인터 연산자 &(주소 연산자)의 의미와 사용법

C++는 두 가지 포인터 연산자를 제공합니다. 바로 주소 연산자(Address of Operator, &)간접 참조 연산자(Indirection Operator, *)입니다.

포인터(pointer)란 다른 변수의 주소값을 저장하는 변수를 말합니다. 즉, 어떤 변수가 다른 변수의 메모리 주소를 담고 있을 때, 그 변수가 다른 변수를 '가리킨다(point to)'고 표현합니다. 포인터가 가리키는 대상은 int나 char 같은 기본 자료형은 물론, 객체, 구조체, 심지어 또 다른 포인터까지 어떤 데이터 타입이든 될 수 있습니다.

주소 연산자(&)란?

주소 연산자(&)는 간접 참조 연산자(*)의 반대 역할을 하는 단항(unary) 연산자입니다. 피연산자로 지정된 변수의 메모리 주소(r-value)를 반환합니다. 쉽게 말해, 변수 이름 앞에 &를 붙이면 그 변수가 저장된 메모리상의 위치(주소)를 얻을 수 있습니다.

예제 코드

#include <iostream>
using namespace std;
int main () {
    int var;
    int *ptr;
    int val;
    var = 3000;
    ptr = &var;     // var의 주소를 가져와 ptr에 저장
    val = *ptr;     // ptr이 가리키는 주소에 있는 값을 가져옴
    cout << "Value of var :" << var << endl;
    cout << "Value of ptr :" << ptr << endl;
    cout << "Value of val :" << val << endl;
    return 0;
}

실행 결과

위 코드를 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.

Value of var : 3000
Value of ptr : 0xbff64494
Value of val : 3000

코드 설명

위 예제의 동작 과정을 살펴보면 다음과 같습니다.

1. ptr = &var; — 주소 연산자(&)를 사용해 변수 var의 메모리 주소를 구한 뒤, 포인터 변수 ptr에 저장합니다. 이 시점부터 ptr은 var를 가리킵니다.

2. val = *ptr; — 간접 참조 연산자(*)를 사용해 ptr이 가리키는 주소에 저장된 값, 즉 var의 값인 3000을 읽어와 val에 대입합니다.

출력 결과에서 볼 수 있듯이, var와 val은 동일한 값 3000을 가지며, ptr에는 16진수 형태의 메모리 주소(예: 0xbff64494)가 저장됩니다. 이처럼 &와 *는 서로 반대 방향의 연산을 수행하는 짝이 되는 연산자이며, C++에서 포인터를 다루는 핵심 도구입니다.