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.0084 sec