Pointer 사용 : O<aside> 💡 함수의 매개변수에 포인터 변수를 넣었을 경우
다음 글에서, 왜 아래처럼 함수 인자에 포인터를 넣었는지 이유가 나옴.
아래 코드는 C스타일로 구현한 참조에 의한 호출로
C++에서는 void swap(int &arg1, int &arg2) 로 구현해도
아래 C스타일과 완전히 똑같이 작동함
</aside>
C에만 존재함
참조에 의한 호출도 값에 의한 형태는 유사해 보인다. 하지만 swap() 함수가 아까랑은 다르게 포인터를 받고있다 포인터는 어떤 주소를 저장하는 변수이며, 그 주소에 있는곳에 가서 메모리를 보면, 거기에 실제 int 값이 있다 라는 의미. swap()함수의 매개변수로는 포인터로 받았었는데, num1, num2 가 &num1 , &num2 으로 들어갔으니, 이놈들을 그냥 그대로 전달하는 게 아니라, num1,num2의 주소가 뽑힌다. 즉, num1,num2 변수의 주소를 뽑아서 swap() 함수에 전달하겠다는것! 이제 swap()함수를 호출하면, arg1, arg2에 복사되는 값이 4096이라는 주소와 4100이라는 주소가 복사가 됨 그럼 이제 swap()을 하면, arg1 주소에 있는 위치에 가서 값을 가져와서 temp에 넣고 arg2 주소에 있는 위치에 가서 값을 가져와서 arg1에 넣죠? 그리고 temp에 저장했던 arg1 값을 arg2에 저장을 하며 sawp이 이루어지는데, 이때는 swap()함수 메모리에 위치한 값이 변하는게 아니라, main()함수 원본이 바뀌어요, 왜? 4096에 저장된 값은 main()함수의 num1을 가르키고 4100에 저장된 값은 main()함수의 num2을 가르키기 떄문 그래서 이거는 참조에 의해서 변수를 받았다, 이렇게 주소 복사해왔다는 거예요, 그래서 원본을 바꿨다고 말할 수 있습니다.
<aside> 💡 포인터를 붙이냐 안붙이느냐에 따라 구분된다
</aside>
<aside> 💡 C & C++ 는 독특하다…
왜? 포인터가 아닌 구조체가 들어와도 똑같이 동작함
즉, Pointer 가 있느냐 없느냐 만으로도
값에 의한 호출인지
참조에 의한 호출인지 알 수 있다!
C / C++ 값에 의한 호출은 모든 타입에 똑같이 동작함
오브젝트를 불러와도 포인터를 붙이지 않았다면, 값에 의한 호출이 가능하다.
이는 곧 호출한 함수 내부에서만 그 값들이 변한다는 의미이다.
</aside>
C & C++ 에서 구조체의 값에 의한 호출일때
C & C++ 에서 구조체의 참조에 의한 호출일때