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

C++의 참조자

by Hwan2 2018. 6. 24.
728x90
반응형

C++은 C언어와는 다르게 참조자 라는 기능이 있습니다.

 

이 글을 읽기 전에 '포인터' 라는 개념을 알고 넘어가야 합니다.

포인터를 모르신다면 포인터에 대한 글부터 읽고 넘어가시길 바랍니다.

 

포인터 보러가기~

 

백문이 불여일견!!

예시부터 봅시다.

#include<iostream>

using namespace std;

void main() {
    int num1 = 10;
    int &num2 = num1;   //참조자 선언

    cout << "num1의 값 : " << num1 << endl;
    cout << "num2의 값 : " << num2 << endl;

    cout << endl;

    cout << "num1의 주소 값 : " << &num1 << endl;
    cout << "num2의 주소 값 : " << &num2 << endl;

}
 

 

참조자의 특성은 포인터와는 다릅니다.

쉽게 생각해서 변수 num1이 복제된것이라 보면 됩니다.

 

num1의 주소값을 0x01234567로 가정한다면

num2의 주소값 또한 0x01234567이 되는 것입니다.

즉, num1==num2가 되버립니다.

 

"그렇다면 참조자는 메모리를 할당 받는 것인가?"

이 질문에 대한 대답은 "할당 할 수 도 있고 안할 수 도 있다"는 것입니다.

 

컴파일러에 따라 컴파일 과정에서 메모리 공간이 필요하다면 메모리 공간을 할당하고

필요가 없다면 할당을 하지 않습니다. 또한 할당 받을 시 데이터의 크기는 일반적인 포인터의 크기와 동일합니다.

 

 

참조자가 선언 가능한 범위에 대해 설명하겠습니다.

 

int &num=10;(X)

 

int &num;(X)

 

int &num=NULL;(X)

 

즉, 참조자는 선언과 동시에 초기화 해야 하며 그 대상은 변수가 되어야 합니다.

 

포인터 또한 변수이니 참조가 가능합니다.

 

ex) *p라는 포인터가 있다고 가정한다면

int *(&ref)=p;   << 이런식으로 선언이 가능합니다.

 

 

참조자의 함수 사용법

 

참조자를 함수를 통해 사용하려면 다음과 같이 사용하면 됩니다.

 

void Test(int &num1, int &num2);

 

함수 호출 시 해당 함수에 있는 변수들은 값을 입력받으면서 초기화 되므로 이렇게 사용이 가능합니다.

 

참조자를 이용해 변수의 값을 변경할 경우 Call-by-Reference 가 되버립니다.

 

참조자는 원본변수==참조자변수가 동일함으로 

즉, 함수 호출 시 매개변수가 값의 복사가 이뤄지는 것이 아니라 매개변수가 원본변수 자체가 되버려서

데이터의 값이 변동되면 원본변수 값도 자연스럽게 바뀌게 되는 것입니다.

 

따라서 값의 변경을 원치 않을 경우 사용되는 기능이 'const'라는 기능입니다.

const를 선언하게 되면 이 값은 상수화가 되버려 값이 바뀌질 않습니다.

 

 

 

반응형

댓글


스킨편집 -> html 편집에서