
https://github.com/POCU/COMP3200CodeSamples
<aside> 💡 목차
</aside>
다음 본문의 코드를 참고했습니다
[포인터 vs 참조 - 참조를 이용한 swap() 함수](https://cybecho.notion.site/vs-swap-43dd383a6187433d8a1a4b62a4e679d7)
_
<aside> 💡 매개변수에
포인터를 사용하는 경우
포인터에는 NULL이 들어가는 순간 코드가 망가질 수 있다.
호출자는 매개변수에 뭔 값을 넣을지 모르기 때문에, 매우 위험한 코드가 될 수 있는데
변수값에는 NULL 이 들어갈수도 있는데, 포인터 매개변수가 들어가면 NULL을 상시 체크해줘야해서 신중하게 선택해야함
포인터를 함수의 매개변수로 사용했을때, number1, number2는 NULL이 들어갈 수 없다 호출자는 매개변수로 NULL을 넣을 수도 있는데, number1이나 number2에 NULL을 넣는 순간 코드는 뻑나죠? 그래서 되게 위험한 연산이 될 수가 있어요, 호출자가 뭔 짓을 할지 모르기 때문에, (예를들어, 방금 호출자가 포인터 변수에 NULL을 넣을수도 있으니까) 쨌든 개발자는 이 코드를 짜면서 '이 swap() 함수에서는 NULL 체크해야 될까?' 'NULL 들어오면 어떡하지?' 이런 고민을 계속 해야하는 단점이 있음..</aside>
<aside> 💡 매개변수에
참조를 사용하는 경우
그럼 C++에서 참조로 가져오면, 포인터에 비해서 무슨 장점이 있는데? C++에서는 호출자가 뭔 짓을 할지 모르기때문에, 기본적으로 참조 매개변수 number1, number2는 NULL을 대입할 수 없게 만들었다 즉, NULL 을 참조를하는것을 막아버린것이다! 고로 NULL이 애초에 들어올 수 없어서 C++에 참조 매개변수로 들어오는 값은 일단 유효한 값으로 들어올 수 있다고 말할 수 있다.</aside>
_
<aside> 💡 매개변수에
포인터를 사용하는 경우
[C++에서 포인터를 증가시키면?](https://cybecho.notion.site/C-1ad8b7a31a2e4a5792d02ef1693c9776)다음 내용에서처럼, 함수의 매개변수로 포인터를 넣으면,
포인터 연산을 하여 매개변수로 넣었을 경우, 문제가 발생할 수 있다.
포인터는 사칙 연산이 가능하기 때문에 호출자가 swap()의 매개변수에 'number1에서 +1을 하고 그다음에 읽어올 거야!' ex) swap(*number + 1, *number2) 이런 짓을 해버릴 수 있다. 근데 이렇게 되면 내가 소유한 메모리 자체가 아니기 때문에 올바른 방법이 아님. 즉, 포인터는 내가 소유하지 않은 메모리에 접근할 수 있는 위험성을 가지고 있는데 참조는 그럴 수 없다. 참조는 자신이 소유하지 않은 메모리를 가서 긁어올 수가 없게 되어있다. 그래서 참조를 쓰는 게 훨씬 안전한 이유인 것이다.</aside>