본문 바로가기
프로그래밍/C++

C++ *와 & 연산자 톺아보기

by bantomak 2026. 3. 29.
반응형

* 역참조 연산자

타입 선언 시 사용하게 되면 해당 타입이 포인터 타입이라는 것을 명시하는 용도로 사용한다.

이 변수는 '주소를 저장하는 바구니입니다.' 라고 선언

int* ptr; (ptr은 주소 저장용)

변수 앞에 사용하게 되면 해당 포인터 타입 변수가 가리키는 주소의 실제 알맹이를 가져오겠다는 의미로 사용한다.

*ptr = 10; (주소지에 10을 넣음)

& 참조 연산자

타입 선언시 사용하게 되면 기존에 선언된 변수의 별칭을 명시하는 용도로 사용한다.

이 변수는 '기존 변수의 별칭을 저장하는 변수입니다.' 라고 선언

int& ref = val; (ref는 val의 별명)

변수 앞에 사용하게 되면 해당 변수의 주소값을 가져온다.

ptr = &val; (val의 주소를 추출)

예제 코드

int main() 
{
    int number = 10;

    // 타입 선언부 (변수를 만드는 단계)
    int* ptr = &number;  // *: 포인터 타입 선언, &: 주소 연산자 (주소를 따옴)
    int& ref = number;   // &: 참조자 타입 선언 (number의 별명 생성)

    // 실행 코드부 (연산을 하는 단계)
    *ptr = 20;           // *: 역참조 (ptr이 가리키는 '알맹이'를 20으로 변경)
    int addr = &ref;     // &: 주소 연산자 (ref, 즉 number의 주소를 따옴)
}

함수의 인자로 사용시

함수의 인자로 사용하게 되면 이때는 타입 선언에 사용된 것이기 때문에 아래와 같은 의미를 가진다.

  • * 나는 포인터다. 포인터 타입
  • & 나는 별명이다. 기존 변수를 타입으로 받음
bool Func(int* ptr, int& ref)
{
	return true;
}

int main()
{
	int value = 10;

	int* ptr = &value;
	int& ref = value;

	Func(&value, value);
	Func(ptr, ref);
	Func(&ref, *ptr);
}

정리하자면

함수의 파라미터를 설정할 때는 타입을 정의하는 것이기 때문에 포인터와 참조 객체를 가리키는 것이지만, 실제 함수를 호출하기 위해서 인자로 넣기 위해서는 실제 객체와 주소값을 가리키는 용도로 사용하게 된다. 해당 부분이 헷갈리기 때문에 주의해서 사용하도록 하자.

함께 읽으면 좋은 글

 

C++ 역참조 연산자와 화살표 연산자에 대해

역참조 연산자(*)역참조 연산자는 C++ 프로그래머가 많이 사용하는 연산자이지만 명칭을 일이 없다보니 입에 잘 붙지 않는 명칭이다.역참조 연산자는 *(애스터리스크, Asterisk)를 이용해서 표현한

jettstream.tistory.com

댓글