반응형
[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
반응형
'Language > C++' 카테고리의 다른 글
[BOJ][C++] 11729 하노이 탑 이동 순서 (2) | 2018.12.19 |
---|---|
[BOJ][C++] 1436 영화감독 숌 (0) | 2018.12.17 |
[C++][BOJ] 1018 체스판 다시 칠하기 (0) | 2018.12.14 |
[BOJ][C++] 2839 설탕옮기기 (0) | 2018.12.12 |
[C++][오류] 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. (0) | 2018.12.11 |
댓글