[C++] 2-3. 참조자의 이해

2024. 9. 11. 16:08·공부/C++
728x90

*윤성우의 열혈 C++ 프로그래밍 교재로 학습하며 정리하였습니다.

 

C++에서는 참조자를 이용하여 메모리 공간에 두개 이상의 이름을 붙여 줄 수 있다.

 

주소값 반환하는 &과는 사용되는 위치가 다르다..

 

int num1 = 2010;​

 

변수의 선언으로 인해서 num1이라는 이름으로 메모리 공간이 할당된다.

int &num2 = num1;

참조자의 선언으로 인해서 num1의 메모리 공간에 num2라는 이름이 추가로 붙게 된다.

 

참조자는 기조에 선언된 변수에 붙이는 '별칭'이다. 그리고 이렇게 참조자가 만들어지면

이는 변수의 이름과 사실상 차이가 없다.

 

예제

#include <iostream>
using namespace std;

int main()
{
    int num1 = 1020;
    int& num2 = num1;
    //num2는 num1의 참조자이다.
    num2 = 3047;
    cout << "VAL : " << num1 << endl;
    cout << "REF : " << num2 << endl;
    cout << "VAL : " << &num1 << endl;
    cout << "REF : " << &num2 << endl;
    return 0;
}

num2는 num1의 참조자이다.

따라서 이후부터는 num1으로 하는 모든 연산은 num2로 하는 것과 동일한 결과를 보인다.

 

int num1 = 2759;
int &num2 = num1;
int &num3 = num2;
int &num4 = num3;

위와 같이 참조자의 수에는 제한이 없으며,

참조자를 대상으로 참조자를 선언하는 것도 가능하다.

 

 

불가능한 참조자 선언의 예시

int &ref = 20; //X
//상수 대상으로의 참조자 선언은 불가능하다.

int &ref; //X
//참조자는 생성과 동시에 누군가를 참조해야 한다.

int &ref = NULL; //X
//포인터처럼 NULL로 초기화하는 것도 불가능하다.

참조자는 선언과 동시에 누군가를 참조해야하며, 그 참조의 대상은 기본적으로 변수가 되어야 한다.

그리고 참조자는 참조의 대상을 변경할 수 없다.

 

참조자 선언 가능 범위

#include<iostream>

using namespace std;

int main(void) {
	int arr[3] = { 1,3,5 };
	int &ref1 = arr[0];
	int& ref2 = arr[1];
	int& ref3 = arr[2];

	cout << ref1 << endl;
	cout << ref2 << endl;
	cout << ref3 << endl;
	return 0;
}

변수의 성향을 지니는 대상이라면 참조자의 선언이 가능하다.

배열의 요소 역시 변수의 성향을 지니기 때문에 참조자의 선언이 가능하다.

 

포인터 변수 대상의 참조자 선언

#include<iostream>
using namespace std;

int main(void) {
	int num = 12;
	int* ptr = &num;
	int** dptr = &ptr;

	int& ref = num;
	int* (&pref) = ptr;
	int** (&dpref) = dptr;

	cout << ref << endl;
	cout << *pref << endl;
	cout << **dpref << endl;
	return 0;

}

 

ptr과 dptr 역시 변수이다. 다만 주소 값을 저장하는 포인터 변수일 뿐이다.

따라서 포인터 및 더블 포인터 역시 참조자의 선언이 가능하다.

728x90

'공부 > C++' 카테고리의 다른 글

[C++] 2-5. new & delete  (1) 2024.09.15
[C++] 2-4. 참조자(Reference)와 함수  (2) 2024.09.14
[C++] 2-2. 새로운 자료형 bool  (0) 2024.09.11
[C++] 2-1. C언어 복습  (0) 2024.09.11
[C++] 1-5. 이름 공간  (0) 2024.09.09
'공부/C++' 카테고리의 다른 글
  • [C++] 2-5. new & delete
  • [C++] 2-4. 참조자(Reference)와 함수
  • [C++] 2-2. 새로운 자료형 bool
  • [C++] 2-1. C언어 복습
knhoo
knhoo
  • knhoo
    &*
    knhoo
  • 전체
    오늘
    어제
    • 전체 (143)
      • Unity 개발일지 (20)
        • [Unity2D]졸업프로젝트 (17)
        • [Unity3D]VR프로젝트 (2)
      • 공부 (118)
        • 게임 수학 (1)
        • 부트캠프 (12)
        • C++ (39)
        • Unity & C# (8)
        • 데이터베이스 (2)
        • 컴퓨터비전 (0)
        • 컴퓨터구조 (0)
        • python (7)
        • BAEKJOON (38)
        • 개발 (2)
        • 자료구조 (9)
      • 일상 (2)
  • 블로그 메뉴

    • Github
    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 📖README
  • 인기 글

  • 태그

    백준 #python
    Python
    c#
    멋쟁이사자처럼후기
    unity2d
    캐시워크
    자료구조
    til
    백준
    C++
    머니워크
    unity
    티스토리챌린지
    패널파워
    오블완
    야핏무브
    비트버니
    Cpp
    구간합
    앱테크
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
knhoo
[C++] 2-3. 참조자의 이해
상단으로

티스토리툴바