call by ...
ํจ์์ ๋งค๊ฐ๋ณ์ ์ ๋ฌ์ ์ค๋ช ํ ๋,
์ฃผ๋ก swap ํจ์๋ฅผ ์ด์ฉํด call by value, call by address, call by reference๋ฅผ ์ค๋ช ํ๋ค.
c++์์ ์ค๋ช ํ๋ call by address๋ ํฌ์ธํฐ ๋ณ์๋ฅผ ์ด์ฉํ ๊ฒ์ผ๋ก
์ผ๋ฐ์ ์ผ๋ก c์์ ์ค๋ช ํ๋ call by reference์ ๋์ผํ๋ค.
(์ด๊ฒ ํท๊ฐ๋ฆฌ๋ ์ ์ธ๋ฐ, ๊ฐ๋ ๊ณผ ์ฉ์ด ์ ๋ฆฌ์ ์ฝ๊ฐ ๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ๋ฏ ํ๋ค.)
๋ํ ๋ ํผ๋ฐ์ค ๋ณ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ๋๋ ๋ฐ์ง ์๋๋์ ๋ฐ๋ผ ์ค๋ช ์ด ์๊ฐ๋ฆฌ๋๋ฐ
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ง ์๊ณ ์๋ณธ ๋ณ์์ ๋ณ์นญ์ผ๋ก์ ํ๋ํ๋ค๋ ์ค๋ช ๋ ์๊ณ ,
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ ์๋ณธ ๋ณ์์ ์ฃผ์๊ฐ์ ์ ์ฅํ๊ณ ์๋ค๊ฐ
๋ ํผ๋ฐ์ค ๋ณ์์ ๊ฐ์ด ์์ ๋๋ฉด ๋ ํผ๋ฐ์ค ๋ณ์์ ์ ์ฅ๋์ด ์๋ ์ฃผ์์ ์๋ ๊ฐ์ ์์ ํ๋ค๋ ์ค๋ช ๋ ์๋ค.
์ค์ ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์ ์๋ ์๊ณ ๋ฐ์ง ์์ ์๋ ์๋ค๊ณ ํ๋ค.
๋ ํผ๋ฐ์ค ๋ณ์๋ ๊ฐ์ฒด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ๋ฐ์์ผํ๋ ๊ฒ์ ์๋๋,
์ปดํ์ผ๋ฌ๊ฐ ํ์ํ๋ค๋ฉด ๊ตฌํ์ ๋ฐ๋ผ ์ ์ฅ ๊ณต๊ฐ์ ์ฐจ์งํ ์ ์๋ค๊ณ ํ๋ค.
๋ํ c++11๋ถํฐ ์์๋ ๋ ํผ๋ฐ์ค๋ก ์ ๋ฌํ ์ ์๋ค๊ณ ํ๋ค.
๋ ํผ๋ฐ์ค ๋ณ์๋ ์๊ฐ๋ณด๋ค ํท๊ฐ๋ฆฌ๊ณ ๋ณต์กํ ๊ฒ์ด ๋ง์๋ณด์ด๋,
์ฝํ ๋ฅผ ์ค๋นํ๋ฉด์ ๊ผญ ํ์ํ ๋ด์ฉ์ ์๋ ๊ฒ ๊ฐ์์ ์ฌ๊ธฐ์ ์ผ๋จ ๋ง๋ฌด๋ฆฌํ๋ค..
call by value: ์ผ๋ฐ ๋ณ์
#include<iostream>
using namespace std;
void swap(int a, int b)
{
int t;
t = a;
a = b;
b = t;
}
int main()
{
int a = 10, b = 20;
cout << "Before: " << a << ", " << b << endl;
swap(a, b);
cout << "After: " << a << ", " << b << endl;
}
call by address: ํฌ์ธํฐ ๋ณ์
#include<iostream>
using namespace std;
void swap(int *pa, int *pb)
{
int t;
t = *pa;
*pa = *pb;
*pb = t;
}
int main()
{
int a = 10, b = 20;
cout << "Before: a = " << a << ", b = " << b << endl;
swap(a, b);
cout << "After: a = " << a << ", b = " << b << endl;
}
=> swap(&a, &b)๊ฐ ์๋ swap(a, b)๋ก ์จ๋ ์๋ฌ๊ฐ ์๋๋ค. ์์ง?
call by reference: ๋ ํผ๋ฐ์ค ๋ณ์
#include<iostream>
using namespace std;
void swap(int &ra, int &ra)
{
int t;
t = ra;
ra = rb;
rb = t;
}
int main()
{
int a = 10, b = 20;
cout << "Before: " << a << ", " << b << endl;
swap(a, b);
cout << "After: " << a << ", " << b << endl;
}
๋ฌผ๋ก call by value๋ก๋ swap ๋์ง ์๋๋ค.
References
http://blog.naver.com/lee9742/80157306799 (call by ...)
https://m.blog.naver.com/dntkrl79/70180305431 (call by ...)
https://hashcode.co.kr/questions/5146/ (call by...)
'Problem Solving > C++ ์ ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
C++14 STL ์ฒ ์ ์ ๋ฌธ) vector (0) | 2020.05.20 |
---|---|
C++ #4: preprocessor directives (0) | 2019.12.07 |
C++ #2: reference variable (0) | 2019.12.05 |
C++ #1: iostream, namespace (0) | 2019.12.05 |
C++ note (0) | 2019.12.05 |
๋๊ธ