가티있는블로그

[C++] 포인터와 레퍼런스

2021. 8. 18. 19:42 | 프로그래밍/C++

변수는 메모리의 특정위치를 가르키는 이름

레퍼런스 변수는 기존 변수에 또 다른 이름 (alias)를 부여하는 것

 

int n = 10;
int& r = n; //레퍼런스

std::cout<< &n << std::endl; //메모리의 주소가 출력된다

 

 

void f1(int n) {++n;}
void f2(int* p} {++(*p);}
void f3(int& r) {++r;} // int& r = c

int main()
{
	f1(a); // call by value 값 변동 없음
	f2(&b); // call by pointer 원본 수정가능
	f3(c); // call by reference 원본 수정가능
}

레퍼런스는 포인터와 마찬가지로 원본을 수정할 떄 사용한다.

래퍼런스는 포인터보다 좀 더 간결한 코드로 사용이 가능하다.

하지만 레퍼런스는 호출자 측면에서 값 변동여부를 예측할 수 없기 때문에 가독성이 좋지 않다.

 

포인터와 레퍼런스

int* p1 = &n; 
int& r1 = n;

int* p2 = 0; // null pointer 가능
int & r2; //error

*p1=20;
r1=20; //자동 * 연산되는 포인터

if(p1 != 0) {}
if(r1 != 0 ) {} // null이 불가능하기 때문에 조사할 필요 없다.

기존변수(메모리)를 가리킨다는 공통저밍 있지만,

포닝터는 변수 주소로 초기화해서 초기값 생략이 가능하지만,

레퍼런스는 변수 이름으로 초기화하기 떄문에 초기값이 반드시 필요하다.

 

 

'프로그래밍 > C++' 카테고리의 다른 글

[C++] static member 정적 멤버 데이터, 함수  (0) 2021.08.19
[C++] 복사생성자  (0) 2021.08.19
[C++] range for, if init, switch init  (0) 2021.07.25
[C++] 람다표현식  (0) 2021.07.25
[C++] constexpr  (0) 2021.07.25