해당 내용은 Pope 님의 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;
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이 될 수 없음
// 우리가 소유하지 않은 메모리 장소를 가리킬 수 없음.
// 즉, 포인터 연산이 불가능 하기 때문에 원지 않는 메모리에 접근 불가!