[c++] 함수 매개변수 복습

Call By Value

매개변수를 가져다가 결과값을 반환.

#include <iostream>

using namespace std;

int add(int a, int b) {
    int c;
    c = a + b;
    return c;
}

int main() {
    int num1 = 10, num2 = 15;
    add(num1, num2);
    return 0;
}

Call By Pointer

이 함수의 결과가 어쨋든 간에 실제 매개 변수에 반영이 된다.

  • Call By Value의 하나의 반환값에 비해 하나의 함수로 여러 결과를 얻을 수 있다. 포인터에 의한 간접 접근.
#include <iostream>

using namespace std;

void swap(int* x,int* y) {
    int temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

int main() {
    int num1 = 10, num2 = 15;
    swap(&num1, &num2);
    return 0;
}

Call By Reference

참조자는 포인터가 아니다. 변수의 별명으로, 함수내에서 참조자는 곧바로 원래의 해당 변수를 대신한다. 결과적으로 아래 swap함수는 inline함수가 될 수 있다. (컴파일러에 의해 결정됨. 안될 수도 있다.)

#include <iostream>

using namespace std;

void swap(int &x,int &y) {
    int temp;
    temp = x;
    x = y;
    y = temp;
}

int main() {
    int num1 = 10, num2 = 15;
    swap(num1, num2);
    return 0;
}

의구심

하나는 Call By Value, 하나는 Not Call By Value로 매개변수가 전달되면 어떻게 되는 걸까?

작동은 할 것이다. 다만 인라인 함수로 작동할지 안할지는 컴파일러가 결정하겠지만, 매개변수의 메커니즘이 다르기 때문에 인라인으로 만들지 않을 것이다.

매개 변수의 형식에 따라 다양한 메커니즘이 하나의 함수에서 실행될 수 있다는 의미이다.

void swap(int &x,int y) {
    int temp;
    temp = x;
    x = y;
    y = temp;
}