새소식

💻 Programming (프로그래밍)/C++

[C++] 레퍼런스(References)

  • -

코딩공부를 하며, 레퍼런스라는 개념이 사실상 이해가 안갔습니다.

하지만, 이제는 쉽게 이해하고 어떠한 사용법이 있는지 적어보도록 하겠습니다.

 

 

레퍼런

int main() {

	int a = 10;
    int &b = a;
}

레퍼런스랑 포인터랑 좀 헷갈리는 경우가 많겠더라구요.

왜냐면 변수앞에 &를 쓰면 변수가 참조하는 주소인 포인터가 되니깐요.

 

하지만 지금 사용할 레퍼런스 개념은 별개로 생각하시면 좀 편할 것 같습니다.

레퍼런스는 변수의 또 다른 이름입니다. 

 

a나 b나 똑같은 주소와, 똑같은 변수값을 공유하고 있어서 하나가 바뀌면 하나도 똑같이 바뀝니다.

 

b의 주소값을 출력해보나 a의 주소값을 출력해보나 같은 값이 출력됩니다.

 

(레퍼런스 b를 추가할때 메모리상 크기는 포인터의 크기가 추가됩니다.)

a 추가시 4byte

&b = a 레퍼런스 선언시 4(원래 int 값) + 4byte(32bit 기준 포인터 크기만큼 추가)


레퍼런스가 호출 규칙

int a = 100;
int &b; // error!!
int &c = a; // ok!!

int &d = 0; //error!!

1) 레퍼런스를 선언 할 때 변수의 이름명을 넣고 무조건 초기화해줘야합니다. 

2) 레퍼런스는 NULL값이 무조건 되면 안됩니다.

3) 또한 0, 1, 2, 3 같은 상수에 별칭을 붙히려고 하면 안됩니다.

 


레퍼런스가 자주쓰이는 예제

void func(int &ref)
{
	cout << ref << endl;
    ref++
}

int main() {
	int a = 100;
    func(a);
}

 

함수의 매개변수로 자주 이용됩니다. 이렇게 되면 매개변수 값이 새로운 변수로 copy가 되지않아 더 안전합니다.

 

 

혹은 함수의 매개변수에 상수 참조를 붙힙니다.

void func(const int &ref){}

이러면, 함수에서 그 값을 빌려서 가져다 쓰기만 하는 것이지, 수정은 못하게 만들어줍니다.


 

레퍼런스 개념은 class의 개념에서 잘 이용됩니다.

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.