[C++] 참조자(reference)

2020. 6. 13. 14:14·Computer Science/Programming Language

참조자(reference) : 변수에 별명을 붙여 접근

- 변수 var 선언 후 ref라고 하는 별명 붙이기 (& 사용)

int var = 10;
int &ref = var;

// 참조자에 값을 대입하면 참조자가 참조하는 변수의 값이 변경됨
ref = 20; 	// var의 값이 20으로 변경됨

 

 

 

참조자 (reference) vs 포인터 (pointer)

 

1. 참조자는 선언과 동시에 초기화 되어야 함

int &ref;	// 컴파일 에러

 

2.  포인터는 변수이기 때문에 포인터가 가리키는 대상은 변경될 수 있음

    참조자는 자신만의 메모리 공간이 할당되지 않기 때문에 참조자가 가리키는 대상은 변경될 수 없음

int &ref = var1;
ref = var2;		//컴파일 에러 : 참조하는 대상을 변경할 수 없음

 

3. 참조자를 상수로 초기화 하면 역시 컴파일 에러남

참조자는 참조대상을 변경할 수 없음 -> 참조하는 대상이 수시로 변경되는 경우에는 포인터 사용

참조자는 선언과 동시에 반드시 초기화 되기 때문에 NULL이 될 수 X

 -> NULL이 될 가능성이 있는 경우에는 포인터 사용( 포인터의 경우에는 NULL 포인터가 존재함)

 

 

참조자의 용도 (상수 포인터와 가장 유사)

- 주로 함수 호출 시에 매개 변수와 반환 값으로 사용됨

- 참조자를 함수의 매개 변수로 사용하면 참조자를 이용하여 함수 외부에 존재하는 변수의 값을 변경할 수 있음

#include <iostream>
using namespace std;

void DecByR(int &r) {	//r은 time의 참조자
	r--;
	return;
}

void DecByP(int* p) {
	--(*p);
	return;
}

int main() {
	int time = 10;

	DecByR(time);	//time을 전달
	cout << time << endl;	// 9

	DecByP(&time);	//time의 주소를 전달
	cout << time << endl;	// 8 

	return 0;
}

 

const 참조자

- 참조자 앞에도 const 수식어 사용 가능 

- 상수를 매개 변수로 받는 경우에 필요함

 

저작자표시 비영리 변경금지 (새창열림)

'Computer Science > Programming Language' 카테고리의 다른 글

[C++] 객체의 동적 생성  (0) 2020.06.14
[C++] 함수 호출 시 인수 전달 방식  (0) 2020.06.13
[C/C++] 동적 메모리 할당(dynamic memory allocation)  (0) 2020.06.12
[C/C++] 변수 (지역변수, 전역변수)  (0) 2020.06.10
[C++] 디폴트 매개변수 (default parameter)  (0) 2020.06.10
'Computer Science/Programming Language' 카테고리의 다른 글
  • [C++] 객체의 동적 생성
  • [C++] 함수 호출 시 인수 전달 방식
  • [C/C++] 동적 메모리 할당(dynamic memory allocation)
  • [C/C++] 변수 (지역변수, 전역변수)
BS Kwak
BS Kwak
  • BS Kwak
    Slow but steady wins the race
    BS Kwak
  • 전체
    오늘
    어제
    • 카테고리 (161)
      • Project (2)
      • Next.js (3)
      • HTML+CSS+JS (17)
      • Computer Science (139)
        • Programming Language (52)
        • 자료구조와 알고리즘 (75)
        • Digital circuit (3)
        • 기타 error (9)
  • 블로그 메뉴

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

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    mysql error
    티스토리챌린지
    LNK2001
    런타임 에러
    해시
    cmd error
    c++error
    오블완
    leetcode
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
BS Kwak
[C++] 참조자(reference)
상단으로

티스토리툴바