본문 바로가기
Language/C++

[C++] call by value 와 call by reference

by 별토끼. 2019. 3. 7.
반응형

[C++] call by value 와 call by reference 


function에서 포인터로 전달하거나 값으로 전달할 때 헷갈리지 않도록 정확히 알아놓자!


* 포인터로 호출 시

void fun(int *a)
{
   *a = 10;
}

function이 포인터를 이용해 호출하는 경우라면, 

int main() {
    int b = 1;
    fun(&b);
    // now b = 10;
    return 0;
}

값이 1이었던 b가 10으로 변한다. 리턴값이 아니어도 원본 자체가 변하는 것이다.


void fun2(int& a) 
{
    a = 5;
}

int main()
{
    int b = 10;
    fun2(b); 

    // now b = 5;
    return 0;
}

이것도 마찬가지이다.


1
2
3
4
5
6
7
8
9
void func(int (*map)[12]) {
    map[0][0= 10;
}
int main() {
    int map[12][12];
    map[0][0= 0;
    func(map);
    //now map[0][0] = 10
}
cs

2차원 배열의 경우도 이런 식으로 전달하면 원본 값이 변한다.



*값으로 호출 시

void fun3(int a)
{
    a = 10;
}

int main()
{
    int b = 1;
    fun3(b);
    // b  is still 1 now!
    return 0;   
}

이렇게 값으로 호출할 경우 main에서는 b의 값이 변하지 않는다.


[출처] https://stackoverflow.com/questions/30083174/c-call-by-reference

반응형

댓글