값� �한 호출
변수가 매개변수로서 함수ì—� ì „ë‹¬ë� 때 변수ì�˜ ê°’ë§Œì�„ 복사
�래� 값� 바뀌지 않�
변수가 매개변수로서 함수ì—� ì „ë‹¬ë� 때 변수ì�˜ ê°’ë§Œì�„ 복사
�래� 값� 바뀌지 않�
참조� �한 호출
매개변수로 사용ë�˜ëŠ” 변수ì—� 대한í�¬ì�¸í„°ë¥¼ ì „ë‹¬
함수내�서 매개변수로 사용�는 변수� 값� 변경
함수란 무엇�가?
매개변수로 사용ë�˜ëŠ” 변수ì—� 대한í�¬ì�¸í„°ë¥¼ ì „ë‹¬
함수내�서 매개변수로 사용�는 변수� 값� 변경
함수란 무엇�가?
▶ 값� �한 호출(Call by Value)
C 언어ì—�서 가장 기본ì �ì�¸ ì�¸ìˆ˜ ì „ë‹¬ 방법.
호출ë�œ 함수는 형ì‹� 매개 변수ì�˜ 기억 장소를 별ë�„로 ìœ ì§€.
함수를 호출하는 프로그램ì�˜ 실 ì�¸ìˆ˜ ê°’ì�„ 호출ë�œ 함수ì�˜ 형ì‹� ì�¸ìˆ˜ì—� 복사해서 다른 ì§€ì— ë³€ìˆ˜ë“¤ê³¼ ë�™ì�¼í•˜ê²Œ 취급.
ê°’ì—� ì�˜í•œ 호출 기법ì—�서는 실ì�¸ìˆ˜ì�˜ ê°’ì�´ ì ˆëŒ€ë¡œ 변하지 않ì�Œ.
호출ë�œ 함수는 형ì‹� 매개 변수ì�˜ 기억 장소를 별ë�„로 ìœ ì§€.
함수를 호출하는 프로그램ì�˜ 실 ì�¸ìˆ˜ ê°’ì�„ 호출ë�œ 함수ì�˜ 형ì‹� ì�¸ìˆ˜ì—� 복사해서 다른 ì§€ì— ë³€ìˆ˜ë“¤ê³¼ ë�™ì�¼í•˜ê²Œ 취급.
ê°’ì—� ì�˜í•œ 호출 기법ì—�서는 실ì�¸ìˆ˜ì�˜ ê°’ì�´ ì ˆëŒ€ë¡œ 변하지 않ì�Œ.
▶ 참조� �한 호출 ( Call by Reference )
참조ì—� ì�˜í•œ ì�¸ìˆ˜ ì „ë‹¬ 기법ì�€ 실 매개 변수ì�˜ 주소를 호출ë�œ 함수ì—� 대ì�‘하는 형ì‹� 매개 변수ì—� 보내는 방법.
실ì�¸ìˆ˜ì�˜ ê°’ì�´ 아니ë�¼ 실ì�¸ìˆ˜ì�˜ 주소를 ì „ë‹¬ ( 형ì‹� ì�¸ìˆ˜ëŠ” ì�´ 주소를 참조하여 실행 )
참조� �한 호출(call by reference, call by address, call by location) 방법� 가�수� 값� 변경시키면 실�수� 값� 변경
반환ë�˜ëŠ” ê°’ì�´ 여러 ê°œì�´ê±°ë‚˜ ë°°ì—´ ì „ì²´ë¥¼ ì „ë‹¬í•˜ëŠ” 경우ì—� 주로 ì�´ìš©.
실ì�¸ìˆ˜ì�˜ ê°’ì�´ 아니ë�¼ 실ì�¸ìˆ˜ì�˜ 주소를 ì „ë‹¬ ( 형ì‹� ì�¸ìˆ˜ëŠ” ì�´ 주소를 참조하여 실행 )
참조� �한 호출(call by reference, call by address, call by location) 방법� 가�수� 값� 변경시키면 실�수� 값� 변경
반환ë�˜ëŠ” ê°’ì�´ 여러 ê°œì�´ê±°ë‚˜ ë°°ì—´ ì „ì²´ë¥¼ ì „ë‹¬í•˜ëŠ” 경우ì—� 주로 ì�´ìš©.
함수란 ìž�료ì—� ë�™ìž‘ì�„ ê°€í•˜ê³ ê°’ì�„ 반환하는 ë¶€ 프로그램으로 C++프로그램ì—�서 ë¹ ì§€ì§ˆ 수 없는 함수가
바로 main()함수로 처ì�Œ ì‹œìž‘í• ë•Œ main()ì�´ ìž�ë�™ì �으로 ë¶ˆë ¤ì§€ê³ ë˜� main()ì�´ 다른 함수를 부를 수가
있습니다.
ë¨¼ì € 함수ì—� 대한 ì „ë°˜ì �ì�¸ 소개를 하면..
바로 main()함수로 처ì�Œ ì‹œìž‘í• ë•Œ main()ì�´ ìž�ë�™ì �으로 ë¶ˆë ¤ì§€ê³ ë˜� main()ì�´ 다른 함수를 부를 수가
있습니다.
ë¨¼ì € 함수ì—� 대한 ì „ë°˜ì �ì�¸ 소개를 하면..
함수� 종류
1) �반함수
ì •ì�˜,ì„ ì–¸,호출ì�´ 엄격히 구분ë�˜ë©° Compilerì—� ì�˜í•´ 처리ë�˜ì–´ object fileì�„ 만들며 ë¶„í• Pro
gramming� 기초가 �니다.
2) 매�로 함수
ì „ì²˜ë¦¬ê³„ì�¸ #defineì—� ì�˜í•´ ì •ì�˜ë�˜ëŠ” 함수.
3) inline함수
매í�¬ë¡œ 함수ì�˜ 특성ì�„ 갖지만 compilerì—� ì�˜í•´ 처리ë�˜ë©° ì�¼ë°˜í•¨ìˆ˜ì™€ ë�™ì�¼í•œ 매개변수 ì „ë‹¬ ë°©
법� 취합니다.
1) �반함수
ì •ì�˜,ì„ ì–¸,호출ì�´ 엄격히 구분ë�˜ë©° Compilerì—� ì�˜í•´ 처리ë�˜ì–´ object fileì�„ 만들며 ë¶„í• Pro
gramming� 기초가 �니다.
2) 매�로 함수
ì „ì²˜ë¦¬ê³„ì�¸ #defineì—� ì�˜í•´ ì •ì�˜ë�˜ëŠ” 함수.
3) inline함수
매í�¬ë¡œ 함수ì�˜ 특성ì�„ 갖지만 compilerì—� ì�˜í•´ 처리ë�˜ë©° ì�¼ë°˜í•¨ìˆ˜ì™€ ë�™ì�¼í•œ 매개변수 ì „ë‹¬ ë°©
법� 취합니다.
함수간ì�˜ ì •ë³´ ì „ë‹¬ 방법
1) 매개변수� �한 방법
주로 함수와 함수간ì�˜ ì •ë³´ ì „ë‹¬ 방법으로 ì“°ì�¸ë‹¤.
2) 외부변수� �한 방법
주로 ê´‘ì—ì �으로 ì •ë³´ë¥¼ ì „ë‹¬í•˜ê±°ë‚˜ 현 시스템ì�˜ ìƒ�태등ì�„ ì•Œê³ ìž� í• ë•Œ 사용.
1) 매개변수� �한 방법
주로 함수와 함수간ì�˜ ì •ë³´ ì „ë‹¬ 방법으로 ì“°ì�¸ë‹¤.
- 값� �한 호출(Call by value)
매개변수ì�˜ ê°’ ìž�체를 ì „ë‹¬ - í�¬ì�¸í„° 참조ì—� ì�˜í•œ 호출(Call by pointer reference)
매개변수ì�˜ 주소를 ì „ë‹¬- 참조ì—� ì�˜í•œ 호출(Call by reference)
실매개변수를 ê³µìœ í•˜ì—¬ 참조2) 외부변수ì—� ì�˜í•œ 방법
주로 ê´‘ì—ì �으로 ì •ë³´ë¥¼ ì „ë‹¬í•˜ê±°ë‚˜ 현 시스템ì�˜ ìƒ�태등ì�„ ì•Œê³ ìž� í• ë•Œ 사용.
ì�¼ë°˜í•¨ìˆ˜ì—�서 ì •ì�˜, ì„ ì–¸, 호출ì—� 대해 예를 들면,
#include
#include
void main()
{
{
double power(double base, int exponent); // 함수ì�˜ ì„ ì–¸(ì›�형)
double base,result;
int exponent;
cout << "밑수 ë°� 지수를 ìž…ë ¥í•˜ì‹œì˜¤\n";
while (cin >> base >> exponent)
{
} double base,result;
int exponent;
cout << "밑수 ë°� 지수를 ìž…ë ¥í•˜ì‹œì˜¤\n";
while (cin >> base >> exponent)
{
result = power(base, exponent); // 함수� 호출
cout << "밑수("<< base <<")" << "지수("<< exponent <<")" << "결과 :"<< result << endl;
} cout << "밑수("<< base <<")" << "지수("<< exponent <<")" << "결과 :"<< result << endl;
double power (double x, int y) // 함수ì�˜ ì •ì�˜
{
ì�„ ì�˜ë¯¸í•˜ê³ powerì�€ 함수명ì�„ ì�˜ë¯¸í•˜ë©° double base, int exponentì�€ 매개변수를 ì�˜ë¯¸í•œë‹¤. power()ë�¼ëŠ”
함수ì�˜ ì›�형ì�´ ìžˆê³ í•¨ìˆ˜ì›�형ì�„ 함수ì�˜ ì •ì�˜ì™€ 비êµ�í•´ë³´ë©´ 함수명,반환형, 매개변수형ì�´ 똑같습니다. ë§Œì�¼
다르다면 컴파ì�¼ëŸ¬ ìž¥ì• ê°€ ë°œìƒ�í• ê²ƒìž…ë‹ˆë‹¤. 다른 ì �ì�´ 있다면 함수 ì›�형ì�€ 마지막ì—� ì„¸ë¯¸ì½œë¡ ìœ¼ë¡œ ë��난다
는 것입니다.
{
double ans="x";
for (int i=1;i < y;i++)
}for (int i=1;i < y;i++)
ans*="x";
return ans; - 여기서 power(double x, int y) 안ì—�서 따옴표가 없어야 í• ê±° ê°™ì�€ë�°...? -ì˜�ë�™
- ê·¸ë¦¬ê³ í•¨ìˆ˜ì�˜ ì›�형과 ì •ì�˜ì�˜ ì�¸ìž� ì�´ë¦„ì�„ 같게 ì�¨ 주는것ì�´ 가급ì � 좋ì�„ 것 같다. -ì˜�ë�™
ì�„ ì�˜ë¯¸í•˜ê³ powerì�€ 함수명ì�„ ì�˜ë¯¸í•˜ë©° double base, int exponentì�€ 매개변수를 ì�˜ë¯¸í•œë‹¤. power()ë�¼ëŠ”
함수ì�˜ ì›�형ì�´ ìžˆê³ í•¨ìˆ˜ì›�형ì�„ 함수ì�˜ ì •ì�˜ì™€ 비êµ�í•´ë³´ë©´ 함수명,반환형, 매개변수형ì�´ 똑같습니다. ë§Œì�¼
다르다면 컴파ì�¼ëŸ¬ ìž¥ì• ê°€ ë°œìƒ�í• ê²ƒìž…ë‹ˆë‹¤. 다른 ì �ì�´ 있다면 함수 ì›�형ì�€ 마지막ì—� ì„¸ë¯¸ì½œë¡ ìœ¼ë¡œ ë��난다
는 것입니다.
ì�´ì œ ì „ì— ë³€ìˆ˜ì™€ ì§€ì— ë³€ìˆ˜ì—� 대해 알아봅시다.
ë¨¼ì € ì „ì— ë³€ìˆ˜ëž€ 것ì�€ ì–´ë–¤ íŠ¹ì • 함수ì�˜ 바깥ì—�서 ì •ì�˜ë�œ 변수는 ì „ì— ë²”ìœ„ 규칙ì�„ ê°€ì§€ê³ main()함수를
í�¬í•¨í•˜ì—¬ 프로그램내 어디서나 사용ì�´ 가능합니다. ì�´ì—� 반해 ì§€ì—변수는 함수몸체 안ì—�서 ì„ ì–¸í•˜ëŠ”ë�° ì�´
ì§€ì—변수란 ê·¸ 함수 안ì—�서만 존재합니다.
ë¨¼ì € ì „ì— ë³€ìˆ˜ëž€ 것ì�€ ì–´ë–¤ íŠ¹ì • 함수ì�˜ 바깥ì—�서 ì •ì�˜ë�œ 변수는 ì „ì— ë²”ìœ„ 규칙ì�„ ê°€ì§€ê³ main()함수를
í�¬í•¨í•˜ì—¬ 프로그램내 어디서나 사용ì�´ 가능합니다. ì�´ì—� 반해 ì§€ì—변수는 함수몸체 안ì—�서 ì„ ì–¸í•˜ëŠ”ë�° ì�´
ì§€ì—변수란 ê·¸ 함수 안ì—�서만 존재합니다.
다�� 예를 봅시다.
#include
#include
void mytest(); // 함수�형
{
int x=1,y=2; // ì „ì—변수
void main(){
cout << "x="<< x <<" \n"; cout << "y="<< y <<" \n"; mytest(); // í•¨ìˆ˜ì„ ì–¸
cout << "x="<< x <<" \n"; cout << "y="<< y <<" \n";
} cout << "x="<< x <<" \n"; cout << "y="<< y <<" \n";
void mytest() // í•¨ìˆ˜ì •ì�˜
{
{
int x="3;" // ì§€ì— ë³€ìˆ˜
cout << "this x="<< x <<" \n"; cout << "this y="<< y <<" \n";
}cout << "this x="<< x <<" \n"; cout << "this y="<< y <<" \n";
ì¶œë ¥ì�€ 다ì�Œê³¼ 같다.
x=1
y=2
this x=3
this y=2
x=1
y=2
함수 mytest ë‚´ì�˜ ì§€ì—변수로 ì„ ì–¸í•œ xì�˜ ê°’ì�´ 3ì�´ ë�˜ë¯€ë¡œ this x=3ì�´ ë�˜ê³ ê·¸ 외ì�˜ 값들ì�€ 모ë‘� ì „ì—변수
로 ì„ ì–¸ë�˜ì–´ 있기 때문ì—� 같게 나오는ë�° 여기서 주ì�˜ 해야 í• ê²ƒì�€ C++ì—�서는 ì „ì—변수를 ê±°ì�˜ 쓰지를 않는
다는 것ì�¸ë�° ì�´ìœ 는 ì „ì—변수는 ê³µìœ ë�˜ ìž�료ì�´ê¸° 때문ì—� ì–´ëŠ� 함수 하나가 다른 함수 모르게 ì „ì—변수를 ë°”
ê¿€ 수 있기 때문입니다. 그래서 나중ì—� 버그가 나면 잡기ë�„ íž˜ë“¤ê³ ë‚˜ì¤‘ì—� ìœ ì§€, 보수 하기가 쉽지가 않기
때문입니다.
x=1
y=2
this x=3
this y=2
x=1
y=2
함수 mytest ë‚´ì�˜ ì§€ì—변수로 ì„ ì–¸í•œ xì�˜ ê°’ì�´ 3ì�´ ë�˜ë¯€ë¡œ this x=3ì�´ ë�˜ê³ ê·¸ 외ì�˜ 값들ì�€ 모ë‘� ì „ì—변수
로 ì„ ì–¸ë�˜ì–´ 있기 때문ì—� 같게 나오는ë�° 여기서 주ì�˜ 해야 í• ê²ƒì�€ C++ì—�서는 ì „ì—변수를 ê±°ì�˜ 쓰지를 않는
다는 것ì�¸ë�° ì�´ìœ 는 ì „ì—변수는 ê³µìœ ë�˜ ìž�료ì�´ê¸° 때문ì—� ì–´ëŠ� 함수 하나가 다른 함수 모르게 ì „ì—변수를 ë°”
ê¿€ 수 있기 때문입니다. 그래서 나중ì—� 버그가 나면 잡기ë�„ íž˜ë“¤ê³ ë‚˜ì¤‘ì—� ìœ ì§€, 보수 하기가 쉽지가 않기
때문입니다.
ì�´ì œ 함수ì�˜ 매개변수 ì „ë‹¬ë°©ë²•ì�„ 알아봅시다.
값� �한 호출방법(Call by value )
: 매개 변수ì�˜ ì „ë‹¬ì‹œ 매개변수ì�˜ ê°’ì�„ ì „ë‹¬í•˜ëŠ” 것으로 실매개변수가 호출ë�œ 함수ì—� ì�˜í•´ ì˜�í–¥ì�„
void main()
{
값� �한 호출방법(Call by value )
: 매개 변수ì�˜ ì „ë‹¬ì‹œ 매개변수ì�˜ ê°’ì�„ ì „ë‹¬í•˜ëŠ” 것으로 실매개변수가 호출ë�œ 함수ì—� ì�˜í•´ ì˜�í–¥ì�„
받지 않습니다.
#include <iostream.h>void main()
{
void test(int, int); // 함수 ì„ ì–¸
int a = 10, b = 20;
test(a,b); // 함수 호출
cout << "a=" << a <<" " << "b=" << b << endl;
}int a = 10, b = 20;
test(a,b); // 함수 호출
cout << "a=" << a <<" " << "b=" << b << endl;
void test(int x, int y) // 함수 ì •ì�˜
{
{
int temp;
temp = x;
x = y;
y = temp;
}temp = x;
x = y;
y = temp;
결과는 a=10 b=20ì�´ì§€ë§Œ ë‚´ë¶€ì �으로 x와 yì�˜ ê°’ì�€ 20, 10ì�´ë‹¤.
ê²°êµ ì‹¤ë§¤ê°œë³€ìˆ˜ê°€ 호출함수ì—� ì�˜í•´ ê°’ì�´ 변하지 않는다는 것ì�„ 알 수 있습니다.
ê²°êµ ì‹¤ë§¤ê°œë³€ìˆ˜ê°€ 호출함수ì—� ì�˜í•´ ê°’ì�´ 변하지 않는다는 것ì�„ 알 수 있습니다.
��터 참조� �한 호출(Call by point reference)
: 대ìƒ� ê°�ì²´ì�˜ 주소값ì�„ ì „ë‹¬í•˜ëŠ” ë°©ì‹�으로 형ì‹� 매개변수ì—� í�¬ì�¸í„° 변수가 사용ë�œë‹¤.
: 대ìƒ� ê°�ì²´ì�˜ 주소값ì�„ ì „ë‹¬í•˜ëŠ” ë°©ì‹�으로 형ì‹� 매개변수ì—� í�¬ì�¸í„° 변수가 사용ë�œë‹¤.
#include <iostream.h>
void main()
{
void main()
{
void test(int*, int*); // 함수 ì„ ì–¸
int a = 10, b = 20;
test(&a,&b); // 함수 호출, a와bì�˜ 주소값ì�„ ì „ë‹¬
cout << "a=" << a <<" " << "b=" << b << endl;
}int a = 10, b = 20;
test(&a,&b); // 함수 호출, a와bì�˜ 주소값ì�„ ì „ë‹¬
cout << "a=" << a <<" " << "b=" << b << endl;
void test(int *x, int *y) // 함수 ì •ì�˜
{
{
int temp;
temp = *x;
temp = *x;
- x = *y;
- y = temp;
결과는 a=20 b=10ì�´ ë�˜ê³ x는 aì�˜ 주소값ì�„ ê°€ì§€ê³ y는 bì�˜ 주소값ì�„ 가지게 ë�œë‹¤.
참조� �한 호출(Call by reference)
: 참조형ì�„ ì�´ìš©í•˜ì—¬ 매개변수를 ì „ë‹¬í•˜ëŠ” 것으로 함수호출시 형ì‹�매개변수ì�¸ 참조형ì�´ 실매개 ë³€
void main()
{
: 참조형ì�„ ì�´ìš©í•˜ì—¬ 매개변수를 ì „ë‹¬í•˜ëŠ” 것으로 함수호출시 형ì‹�매개변수ì�¸ 참조형ì�´ 실매개 ë³€
수로 초기화ë�˜ì–´ 함수 ë‚´ë¶€ì—�서 실매개변수를 참조하여 ì‚¬ìš©í• ìˆ˜ 있다.
#include <iostream.h>void main()
{
void test(int&, int&); // 함수 ì„ ì–¸
int a = 10, b = 20;
test(a,b); // 함수 호출, 형�매개 변수�
cout << "a=" << a <<" " // 참조형� 실매개 변수로 초기화 << "b=" << b << endl;
}int a = 10, b = 20;
test(a,b); // 함수 호출, 형�매개 변수�
cout << "a=" << a <<" " // 참조형� 실매개 변수로 초기화 << "b=" << b << endl;
void test(int &x, int &y) // 함수 ì •ì�˜
{
{
int temp;
temp = x;
x = y;
y = temp;
}temp = x;
x = y;
y = temp;
ê²°ê³¼ì �으로 a=20 b=20ì�´ ë�˜ëŠ”ë�° ê²°êµ í•¨ìˆ˜ë‚´ë¶€ì—�서 실매개변수를 참조하여 사용하는 것입니다.










