본문 바로가기

Programming/C&C++

Call by Reference vs Call by Address

1. Call by value 는 쉬운 개념이니 아실거라고 믿고 넘어가겠습니다.


2. Call by Reference는 주소값을 넘기는것입니다.

주소값이 넘어 가기 때문에.. foo함수에서 값을 변경한다면

main에서의 a의 값도 변경이 됩니다.

  1. void foo(int &a)
  2. {}
  3.  
  4. void main()
  5. {
  6.   int a = 10;
  7.   foo(a);
  8. }


3. Call by address(참조)

이 방식은 함수를 호출하는 형식은 Call by value와 같아 보이지만 함수인자를 받는

부분이 다르게 됩니다.  보시면 인자를 받는 함수 부분에 &기호가 있습니다.

쉽게 말하면 별명과 같은 의미로 사용이 됩니다.

그냥 이해하기 쉽도록 설명 한다면 하나의 메모리 공간을 가르치는 변수명 이외에

그 메모리 공간을 가르칠수 있는 별명이 하나 존재하는것이죠.

그렇기 때문에 이것 역시 Call by Reference처럼 foo함수에서 값을 변경시키면

main에서도 값이 변경이 됩니다.

Call by reference는 포인터 변수 메모리를 잡지만... address는 메모리를 잡지 않기 때문에

더욱더 효율적인 방식이라고 볼수 있죠 하지만 보통 Call by Reference를 많이 사용하는

것 같습니다.

  1. void foo(int *a) 
  2. {}
  3.  
  4. void main() 
  5. { 
  6.   int a = 10;
  7.   foo( &a );
  8. }