c++ call by value / call by reference
포인터 / 참조자
- &는 주소연산자이므로 & 사용시 변수에 할당된 메모리의 주소 확인 가능
- '*' (포인터)는 말 그대로 어디를 가르킨다는 의미로 내가 보고자하는 메모리 영역의 메모리 주소값에 접근하는 것.
- b는 포인터이므로 b,&b 출력시 해당 주소값을 반환하며 *b는 해당 value를 출력한다.
Call by Value
- call by value는 함수 호출시 넘기는 인자의 값이 매개변수에 적용돼더라도 인자에 영향을 전혀 주지 않는 것을 의미함.
- 이와 같이 main함수에서 swap을 시키면 20,10 이 출력이 돼야 할 것 같지만 값은 그대로 10,20 처럼 최초의 할당된 상태 그대로 출력이 된다.
- 이러한 이유는 지역변수와 매개변수는 메모리 공간 중 stack에 할당되는데 swap함수를 호출하는 순간 매개변수 x,y가 stack에 할당되고 a,b의 값이 x,y에 단순 복사를 할 뿐이다. 따라서 각각 분리된 형태로 저장이 되므로 값의 변화가 이루어지지 않는다.
Call by reference
- call by referecne 에서 가장 주안점으로 두어야할 것은 매개변수가 포인터 변수로 정의되었다는 것이다.
- 변수의 주소를 인자로 받으니 swap 함수를 거침으로써 인자별로 각각의 주소번지르 가르키게 됨으로써 값이 변하게 될 수 있는것이다.