๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Problem Solving/C++ ์ •๋ฆฌ

C++ #3: call by value, address, reference

by ํ–‰๋ฑ 2019. 12. 6.

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

๋Œ“๊ธ€