함수에 인수를 넘겨주는 방식
call by pointer의 경우 foo의 stack frame에 a의 주소가 들어있다.
b의 값을 얻기위해 ap가 가르키는 main의 a=0과 1을 더해 b값을 얻는다.
call by reference의 경우 call by pointer과 동일한데
이는 어셈블리 코드가 동일하기 때문이다.
하지만 포인터를 넘겨줘야할 경우를 제외하고는 레퍼런스로 넘겨주는게 좋은데
이는 포인터로 넘겨주면 버그를 일으킬 확률이 높아지기 때문이다.
또한 foo에서 main의 a를 재정의하지 않았다면
void fooR(const int & a)처럼 const를 붙여주어 더 안전한 코드를 만들 수 있다.
이렇게 붙여주고 foo에서 a = 100처럼 인수를 재정의한다면
에러가 나온다.
만약 object나 array같은 것을 넘겨준다면 call by reference, pointer가 더 좋은 선택인데,
call by value의 경우
object나 array부분이 복사되기때문에 효율적이지 못하기 때문이다.