call-by-value VS. call-by-reference (C++)

용가리🐉·2023년 3월 13일
0

기타

목록 보기
1/5
post-thumbnail

c++ 과목을 재수강하며(과거의 나 반성해) 오랜만에 call by value와 call by reference를 마주하게 되었다.
개발자들 사이에서 꽤나 논쟁의 여지가 있는 요소라는 것을 알고 이 기회에 제대로 기억해놓자 싶어 정리하게 되었다. (그래봤자 난 야매로 이해하는 것뿐 언어 자체를 세부적으로 파고들면 할 말이 없다)

교수님 역시 Swap 함수를 통해 간단히 설명해주셨다.

Call-by-value (값에 의한 호출)

// include, std와 같은 문법은 생략

void swap(int a, int b) {
	int temp = a;
    a = b;
    b = temp;
}

int main(){
	int num1 = 10;
    int num2 = 20;
    
    swap(num1, num2);
    
    cout << num1 << endl; // 10
    cout << num2 << endl; // 20
    
    return 0;
}

'call-by-value'를 수행한 num1, num2의 값은 변경되지 않고 출력된다.

  • 저장한 값을 복사해서 인자로 줌
    → swap 함수 호출 시에 num1, num2를 복사하여 swap 함수의 a,b에 인자로 줬기 때문에 실제 저장과 교환은 a와 b의 주소 공간에서 이루어짐
  • swap 함수의 내부에서 유효한 a, b는 해당 함수 종료 시 num1, num2에 영향을 주지 않고 사라짐

num1, num2의 값을 변경하고 싶다면 다음에 기술할 call-by-reference를 살펴보도록 하자

Call-by-reference (참조에 의한 호출)

void swap(int *a, int *b) {
	int temp = *a;
    *a = *b;
    *b = temp;
}

int main() {
	int num1 = 10;
    int num2 = 20;
    
    swap(&num1, &num2);
    
    cout << num1 << endl; // 20
    cout << num2 << endl; // 10
    
    return 0;
}
  • &가 주소값을 나타내는 것이 아님을 명심!
    C++의 참조값 설명
  • &num1, &num2를 인자로 넘겨주며 별명으로 이들을 호출하고 직접 데이터를 바꾼다.
profile
자아를 찾아 떠나는 중,,,

0개의 댓글

관련 채용 정보