c++ 참조자 레퍼런스

SOEUN CHOI·2022년 5월 17일
0

C++_study

목록 보기
2/15

씹어먹는 C++

3장 c++ 참조자 래퍼런스 30p ~ 46p


Pointer & reference

Difference between pointer and reference


diffpointerreference
사용법*( 변수이름 )( 타입 )&
or ( 타입 )*or &( 변수이름 )
개념주소값 저장별명으로 해당 주소값 사용
사용 이유불필요한 &, * 사용이 줄어듦
정의 시변수 명시 불필요반드시 변수 명시
참조 변경다른 주소값으로 가능변경 불가능
메모리 할당공간 할당컴파일러 구현에 따라 다름
배열 생성가능불가능

reference

함수 인자로 받기

실제 변수를 넘기는 것과 같다

int change_val(int &p) {
p = 3;
return 0;
}

int main() {
int number = 5;
std::cout << number << std::endl;
change_val(number);
std::cout << number << std::endl;
}

result
5
3

상수 참조 불가능

원한다면 const 사용

// do not use 
int &ref = 4;

// use
const int &ref = 4;

레퍼런스 배열 불가능

메모리 상 존재하지 않을 수 있으므로

하지만 배열의 레퍼런스 생성은 가능
포인터와 다르게 반드시 크기 명시

int arr[3] = {1, 2, 3};
int(&ref)[3] = arr; // refenence 크기 반드시 명시
ref[0] = 2;
ref[1] = 3;
ref[2] = 1;

레퍼러스 리턴 (※주의※ Dangling reference)

함수 사용시 지역변수 레퍼런스를 리턴하게 되면 함수 종료 후 사라지기 때문에 reference가 참조 할 것이 사라지게 된다.

오류를 피하기 위해 이왕이면
외부 변수 레퍼런스로 리턴 하자

만약 다른 타입으로 return 하고 레퍼런스로 받는 다면 컴파일 오류가 발생한다.
const를 사용하면 가능 하나 사라지기 전까지만 사용 가능 하다.

profile
soeun choi

0개의 댓글