U E D R , A S I H C RSS

Hardcore Cpp Study/첫숙제/Value Vs Reference/변준�

값� �한 호출
변수가 매개변수로서 함수� 전달� 때 변수� 값만� 복사
�래� 값� 바뀌지 않�

참조� �한 호출
매개변수로 사용�는 변수� 대한��터를 전달
함수내�서 매개변수로 사용�는 변수� 값� 변경
함수란 무엇�가?

▶ 값� �한 호출(Call by Value)

C 언어�서 가장 기본�� �수 전달 방법.
호출� 함수는 형� 매개 변수� 기억 장소를 별�로 유지.
함수를 호출하는 프로그램� 실 �수 값� 호출� 함수� 형� �수� 복사해서 다른 지역 변수들과 ��하게 취급.
값� �한 호출 기법�서는 실�수� 값� 절대로 변하지 않�.

▶ 참조� �한 호출 ( Call by Reference )

참조� �한 �수 전달 기법� 실 매개 변수� 주소를 호출� 함수� 대�하는 형� 매개 변수� 보내는 방법.
실�수� 값� 아니� 실�수� 주소를 전달 ( 형� �수는 � 주소를 참조하여 실행 )
참조� �한 호출(call by reference, call by address, call by location) 방법� 가�수� 값� 변경시키면 실�수� 값� 변경
반환�는 값� 여러 개�거나 배열 전체를 전달하는 경우� 주로 �용.



함수란 ìž�료ì—� ë�™ìž‘ì�„ 가하고 ê°’ì�„ 반환하는 ë€ í”„ë¡œê·¸ëž¨ìœ¼ë¡œ C++프로그램ì—�서 빠지질 수 없는 함수가
바로 main()함수로 처ì�Œ 시작할 때 main()ì�´ ìž�ë�™ì �으로 불려지고 ë˜� main()ì�´ 다른 함수를 ë€ë¥¼ 수가
있습니다.
먼저 함수� 대한 전반�� 소개를 하면..

함수� 종류
1) �반함수
정�,선언,호출� 엄격히 구분�며 Compiler� �해 처리�어 object file� 만들며 분할 Pro
gramming� 기초가 �니다.
2) 매�로 함수
전처리계� #define� �해 정��는 함수.
3) inline함수
매�로 함수� 특성� 갖지만 compiler� �해 처리�며 �반함수와 ��한 매개변수 전달 방
법� 취합니다.

함수간� 정보 전달 방법
1) 매개변수� �한 방법
주로 함수와 함수간� 정보 전달 방법으로 쓰�다.
- 값� �한 호출(Call by value)
매개변수� 값 �체를 전달
- ��터 참조� �한 호출(Call by pointer reference)
매개변수� 주소를 전달
- 참조� �한 호출(Call by reference)
실매개변수를 공유하여 참조
2) 외ë€ë³€ìˆ˜ì—� ì�˜í•œ 방법
주로 광역�으로 정보를 전달하거나 현 시스템� �태등� 알고� 할 때 사용.


�반함수�서 정�, 선언, 호출� 대해 예를 들면,
#include

void main()
{
double power(double base, int exponent); // 함수� 선언(�형)
double base,result;
int exponent;

cout << "밑수 � 지수를 입력하시오\n";
while (cin >> base >> exponent)
{
result = power(base, exponent); // 함수� 호출
cout << "밑수("<< base <<")" << "지수("<< exponent <<")" << "결과 :"<< result << endl;
}
}

double power (double x, int y) // 함수� 정�
{
double ans="x";
for (int i=1;i < y;i++)
ans*="x";
return ans;
}
  • 여기서 power(double x, int y) 안ì—�서 따옴표가 없어야 í•  ê±° ê°™ì�€ë�°...? -ì˜�ë�™
  • 그리고 함수ì�˜ ì›�형과 ì •ì�˜ì�˜ ì�¸ìž� ì�´ë¦„ì�„ 같게 ì�¨ 주는것ì�´ 가급ì � 좋ì�„ 것 같다. -ì˜�ë�™

위ì�˜ 예제ì—�서 함수ì�˜ ì„ ì–¸ë€ë¶„ì�¸ double power(double base, int exponent); ì—�서 doubleì�€ 반환값ì�˜ 형
� �미하고 power� 함수명� �미하며 double base, int exponent� 매개변수를 �미한다. power()�는
함수� �형� 있고 함수�형� 함수� 정�와 비�해보면 함수명,반환형, 매개변수형� 똑같습니다. 만�
다르다면 컴파�러 장애가 발�할 것입니다. 다른 �� 있다면 함수 �형� 마지막� 세미콜론으로 �난다
는 것입니다.

�제 전역 변수와 지역 변수� 대해 알아봅시다.
먼저 전역 변수란 것� 어떤 특정 함수� 바깥�서 정�� 변수는 전역 범위 규칙� 가지고 main()함수를
�함하여 프로그램내 어디서나 사용� 가능합니다. �� 반해 지역변수는 함수몸체 안�서 선언하는� �
지역변수란 그 함수 안�서만 존재합니다.

다�� 예를 봅시다.
#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";
}

void mytest() // 함수정�
{
int x="3;" // 지역 변수
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++�서는 전역변수를 거� 쓰지를 않는
다는 것�� �유는 전역변수는 공유� �료�기 때문� 어� 함수 하나가 다른 함수 모르게 전역변수를 바
꿀 수 있기 때문입니다. 그래서 나중� 버그가 나면 잡기� 힘들고 나중� 유지, 보수 하기가 쉽지가 않기
때문입니다.


�제 함수� 매개변수 전달방법� 알아봅시다.
값� �한 호출방법(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;
}

void test(int x, int y) // 함수 정�
{
int 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 test(int*, int*); // 함수 선언
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;
  • x = *y;
  • y = temp;
}


결과는 a=20 b=10� �고 x는 a� 주소값� 가지고 y는 b� 주소값� 가지게 �다.


참조� �한 호출(Call by reference)
: 참조형� �용하여 매개변수를 전달하는 것으로 함수호출시 형�매개변수� 참조형� 실매개 변
수로 초기화ë�˜ì–´ 함수 ë‚´ë€ì—�서 실매개변수를 참조하여 사용할 수 있다.

#include <iostream.h>
void main()
{
void test(int&, int&); // 함수 선언
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;
}


ê²°ê³¼ì �으로 a=20 b=20ì�´ ë�˜ëŠ”ë�° ê²°êµ­ 함수내ë€ì—�서 실매개변수를 참조하여 사용하는 것입니다.
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:22
Processing time 0.0585 sec