(C++) 7.1 참조에 의한 인수 전달

이준우·2021년 11월 7일
0

이번 장부터 함수에 대한 개념을 배워보려고 한다.

우리가 함수의 매개변수에 값을 넣어주면 그 매개변수는 함수 안에서 사라지고 만다. 예를 들어, 이와 같은 코드를 짰을때, 문제가 발생한다. 분명 함수안에서 +1 연산을 진행하였으나 출력해보면 main()문의 x갑과 주소값이 동일하게 나오는 문제점을 볼 수 있다.

이러한 문제점을 해결하기 위해서는 포인터와 참조를 사용하여 해결할 수 있었다.

여기서 잠깐!

곧 있으면 객체 지향에 대해 배우게 될텐데 이 static에 대한 개념을 잠시 알아보고 가도록 하자.
static에 대해 알고 넘어가는 것이 좋을 것 같아 이해하기 쉽게 함수로 만들어 구현해 보았다. 우선 가장 큰 특징은 asd()를 거쳤음에도 불구하고 값이 초기화되지 않는다. 들어간 값이 초기화되지 않고 계속해서 더해지며 출력되어지는 것을 볼 수 있다. 또한 전역변수처럼 다른 함수에도 사용이 가능하다는 장점이 있다.


또 C 나 C++같은 경우에는 return값이 하나밖에 못하므로 매개변수가 많은 경우가 보이는데, 이때 입력이 뭔지 출력이 뭔지 헷갈릴 때가 있다. 이럴 경우 눈치껏 확인하는 팁이 있는데, 매개변수를 보면 const로 선언된것이 있고 참조로 사용되는 경우가 있다. 이럴 경우 const는 사용자의 입력으로 사용되는 것이고 참조는 출력으로 사용되는 경우가 많으니 알아두도록 하자.

참조를 사용하면 정말 편하긴 한데, 단점이 있긴하다. 위와 같은 코드로 작성을 할 경우 사용할 수 없다. 참조는 참조를 할수 있는 주소가 필요한데, 일반 상수같은 literal은 주소를 갖지 않아 참조를 할 수 없는 상황이 발생한다. 이 경우에 해결할 수 있는 2가지 해결법이 있는데, 하나씩 알아보자.
왼쪽의 경우에는 참조연산자를 없앤 것이고 오른쪽의 경우에는 const를 붙였다. 이렇게 사용하면 가능하긴 하다. 하지만 오른쪽의 경우에는 들어오는 값이 내부에서 절대 바뀔수 없으므로 user가 잘 판단하여 고쳐야 한다.

하지만 요즘에는 const를 사용하여 입력값을 넣는 경우가 많으니, 잘 알아두도록 하자.


이렇게 배열을 함수의 매개변수로 보내는 경우도 있는데, 이는 거의 안쓰인다. 배열을 함수의 매개변수로 보낼때에는 정적할당보단 동적할당으로 사용하여 보내는 경우가 많아서 보통은 vector을 사용하여 보낸다.
이처럼 말이다. 또한 std::array를 사용하여 구현할 수도 있다.

profile
꿈꾸는 CV

0개의 댓글