C++ 참조(Reference)

flowjiyun·2022년 6월 22일

CPP

목록 보기
3/4
post-thumbnail

해당 내용은 Pope 님의 C++ 언메니지드 프로그래밍 강좌를 공부하면서 정리하였습니다.

참조(Reference)

  • 포인터 연산, 주소변경이 없어도 될 때 안전하게 쓸 수 있음
  • 기존 C 예제
// call by value

void swap(int arg1, int arg2)
{
		int temp = arg1;
		arg1 = arg2;
		arg2 = temp;
}

struct Mystruct // 8byte
{
		int Number;
		int NotNumber;
};

void Increase(Mystruct argument) // 구조체도 값으로 복사함
{
		argument.Number = argument.Number + 1;
}

// call by reference

struct Mystruct // 8byte
{
		int Number;
		int NotNumber;
};

void Increase(Mystruct* argument)
{
		argument->Number = argument->Number + 1;
}

참조의 특징

  • 별칭이다
int number = 100;
int& reference = number;
  • NULL이 될 수 없음
int& reference = NULL; // ERROR
  • 초기화 중에 반드시 선언되어야 함
int& reference; //ERROR
int& reference = number; // ok
  • 참조하는 대상을 바꿀 수 없음!!
int number1 = 100;
int number2 = 200;

int& reference = number1;
reference = number2; // **세 변수값이 모두 200이 됨!!! number1 에서 number2로 참조대상이 바뀌지 않음** 
  • 함수 매개변수로서의 참조
// 참조를 이용한 swap 함수
void swap(int& number1, int& number2)
{
		int temp = number1;
		number1 = number2;
		number2 = temp;
}
// number1 과 number2는 NULL이 될 수 없음
// 우리가 소유하지 않은 메모리 장소를 가리킬 수 없음.
// 즉, 포인터 연산이 불가능 하기 때문에 원지 않는 메모리에 접근 불가!
  • 컴퓨터는 참조가 뭔지 알 수 있을 까??
    • 어셈블리어 단에서 보면 같은 코드로 되어 있어 컴퓨터는 참조와 포인터를 구분하지 못함 !!
    • 컴파일러는 참조를 포인터로 바꿔줌. 기계가 이해할 수 있도록
    • 결국 C언어에 없는 기능은 다른 엔지니어가 구현한 것임
profile
FLOW & VECTOR

0개의 댓글