Call by Reference





#include <iostream>

// 레퍼런스는 사실 포인터다
// 출력함수를 define해서 좀 더 편하게 사용한다
#define LOG(x) std::cout <<  x <<std::endl

// call by value : 변수 값을 복사를 한다
// void Increment(int a)
// {
//	++(a);
// }

// call by reference 1유형 : 주소 값만 넘겨준다 
// Increment(&number); number 주소를 가져온다
// void Increment(int* a)
// {
//	++(*a);
// }

// call by reference 2유형 : 주소값을 넘겨준다 
// Increment(number); :number 주소를 가져온다
void Increment(int& a)
{
	++(a);
}

// C에서는 포인터로 가져오는 방식이었으나 CPP에서 레퍼런즈 참조 가능해짐
void SWAP(int& x, int& y)
{
	int temp = y;
	y = x;
	x = temp;
}

int main()
{
	// sizeof(자료형, 변수이름)
	int number = 10;
	LOG(number); //편리한 출력

	//포인터
	//null reference exception

	int* intPointer = nullptr;  //int* intPointer = NULL; //int* intPointer = 0;
	intPointer = &number;
	int& intRef = number;
	intRef = 200;
	LOG(intRef);
	LOG(number);
	LOG(intPointer);

	//레퍼런스 (참조, 메모리 주소값)
	Increment(number);
	LOG(number);

	int a = 10;
	int b = 20;
	std::cout << "스왑전 a, b 값\n";
	LOG(a); LOG(b);

	//a<->b 스와핑
	/*int temp;
	temp = a;
	a = b;
	b = temp;
	*/
	SWAP(a, b);
	std::cout << "스왑후 a,b 값\n";
	LOG(a); LOG(b);

	system("pause"); //종료 전에 잠시 대기하는 명령어
}






0 comments:

댓글 쓰기