포인터와 레퍼런스




 #include <iostream>


//레퍼런스는 사실 포인터다


//출력함수

#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);

}



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

{

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:

댓글 쓰기