
https://github.com/POCU/COMP3200CodeSamples
<aside> 💡 목차
</aside>
 코드와 동일하다
즉, 값을 swap() 함수가 호출되었을때 새로운 메모리공간에 복사하는 개념임](https://prod-files-secure.s3.us-west-2.amazonaws.com/09ccd4d5-876c-4bba-bbdf-cc77a0a11257/e12629fe-4f66-46dd-9d72-63817d109bc8/Untitled.png)
포인터는 - [‣](https://cybecho.notion.site/d94dbe5d406d4b7ca9c76ad21fbeb347) 코드와 동일하다
즉, 값을 swap() 함수가 호출되었을때 새로운 메모리공간에 복사하는 개념임
참조로 구현한 swap() 의 경우...?
swap() 함수의 매개변수의 number1은 함수 호출자가 집어넣는 변수가 되는거임
**int& number1 = <호출자가 집어넣는 변수>**
다음같이 이해하면 된다
즉 number1, number2 얘네는 복사 해오는 게 아니라,
호출자가 집어넣은 변수들을 참조하는 거죠? (호출자가 집어넣은 변수들을 가르킴)
그리고 이제 swap() 내부 함수가 작동하면,
number1 , number2 는 함수 내부에서만 유효하지만,
호출자가 입력한 원본 변수를 참조하기 때문에, (리눅스의 심볼링 링크 개념)
number1 = number2 코드가 실행되면,
호출자가 매개변수로 준 원본 변수가 변경되며 swap() 함수가 정상적으로 실행된다
즉, 참조를 이용한 swap() 함수를 더 깔끔하게 짤 수 있다.
[포인터 vs 참조 - 참조를 이용한 swap() 함수](https://cybecho.notion.site/vs-swap-43dd383a6187433d8a1a4b62a4e679d7)
똑같다! 근데 C에서 매개변수까지 포인터를 넣어주다보니, 실수가 많아져서 사용하기 불편함
그래서 C++올라오면서 편하게 쓰려고 만든 매크로 개념임

#include <iostream>
using namespace std;
void swapValue(int x, int y);
void swapAddr(int *px, int *py);
void swqpRef(int &x, int &y);
int main()
{
int x = 5;
int y = 7;
int *px = &x;
int *py = &y;
swapValue(x, y);
cout << x << " " << y << endl;
swapAddr(px, py);
cout << x << " " << y << endl;
swqpRef(x, y);
cout << x << " " << y << endl;
return 0;
}
void swapValue(int x, int y)
{
int tmp = x;
x = y;
y = tmp;
return;
}
void swapAddr(int *px, int *py)
{
int tmp = *px;
*px = *py;
*py = tmp;
return;
}
void swqpRef(int &x, int &y)
{
int tmp = *&x; //x가 존재하는 주소의 값
*&x = *&y;
*&y = tmp;
return;
}