Untitled

https://github.com/POCU/COMP3200CodeSamples

<aside> 💡 목차


</aside>

C# & C++ UNIT

함수 매개변수로서의 참조

![포인터는 - [‣](https://cybecho.notion.site/d94dbe5d406d4b7ca9c76ad21fbeb347) 코드와 동일하다

즉, 값을 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++올라오면서 편하게 쓰려고 만든 매크로 개념임

Untitled

→ 자주 헷갈리는 참조 코드 정리본,,,

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