참조자
참조자(Reference): 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름.
ex)
int num=10; //정수 10을 가지는 변수num선언
int &ref=num; //변수 num의 참조자 ref선언
- &연산자는 변수의 주소 값을 반환하는 연산자지만 새로 선언되는 변수의 이름 앞에 등장하면, 이는 참조자의 선언을 뜻하는 게 된다. 즉, [num ref(10)]
- 참조자는 변수를 대상으로만 선언이 가능하고, 선언됨과 동시에 누군가를 참조해야만 한다.(int &ref=20;(X))
- 참조자는 별칭에 비유된다.
- 참조자의 수에는 제한이 없으며, 참조자를 대상으로도 참조자를 선언할 수 있다.
ex)
int num=10;
int &num2=num1;
int &num3=num2;
int &num4=num3; => [num num2 num3 num4 (10)]
- 참조자를 기반으로도 Call-by-reference의 함수호출을 진행할 수 있다.(매개변수는 함수가 호출되어야 초기화가 진행되는 변수들이다.)
- 함수의 호출문장만 보고도 함수의 특성을 어느 정도 판단할 수 있어야 한다. 그러나 참조자를 사용하는 경우, 함수의 원형을 확인해야 하고, 확인결과 참조자가 매개변수의 선언에 와있다면, 함수의 몸체까지 문장 단위로 확인을 해서 참조자를 통한 값의 변경이 일어나는지를 확인해야 한다. 참조자를 써야할 경우(참조자를 통한 값의 변경을 진행하지 않을 경우)에는 참조자를 const로 선언해서, 함수의 원형만 봐도 값의 변경이 이뤄지지 않음을 알 수 있게 한다.
ex)void exfunction(const int &ref){...} //함수 exfunction내에서 참조자 ref를 이용한 값의 변경 불가능하다.
- 지역변수를 참조형으로 반환하는 일은 없어야한다.
- const 참조자를 이용해서 상수를 참조할 때'임시변수'라는 것을 만든다. 그리고 이 장소에 상수를 저장하고선 참조자가 이를 참조하게끔 한다.
ex)
const int &ref = [30;---->[임시변수(30)]
Call-by-reference: 주소 값을 전달받아서, 함수 외부에 선언된 변수에 접근하는 형태의 함수호출.
=====================================
*check! 이럴 경우 swap함수를 정의하라
int num1=10, num2=20;
int* ptr1=&num1;
int* ptr2=&num2;
swap(*ptr1,*ptr2) //함수 호출부
-------------------------------------
a)void swap(int &p1, int &p2){}
=====================================
=====================================
q) const int num=12; 포인트 변수를 선언해서 위 변수를 가리키게 하자. 또 포인터 변수를 참조하는 참조자를 선언하라.
a)
const int num=12;
const int* ptr=#
const int* (&dptr)=ptr;
=====================================
'예전 포스팅 모음' 카테고리의 다른 글
[C++] 생성자와 소멸자 (0) | 2014.08.04 |
---|---|
[java] 객체지향 프로그래밍I 정리(클래스~초기화) (0) | 2014.08.01 |
[java] 단순 계산식 계산하기(Scanner, nextInt(), next().charAt()) (0) | 2014.08.01 |
[C++] 클래스 (0) | 2014.07.31 |
[C++] new&delete / 구조체 (0) | 2014.07.31 |