<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=HardcoreCppStudy%2F%EC%B2%AB%EC%88%99%EC%A0%9C%2FValueVsReference%2F%EB%B3%80%EC%A4%80%EC%9B%90</id>
	<title>HardcoreCppStudy/첫숙제/ValueVsReference/변준원 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://mediawiki.zeropage.org/index.php?action=history&amp;feed=atom&amp;title=HardcoreCppStudy%2F%EC%B2%AB%EC%88%99%EC%A0%9C%2FValueVsReference%2F%EB%B3%80%EC%A4%80%EC%9B%90"/>
	<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=HardcoreCppStudy/%EC%B2%AB%EC%88%99%EC%A0%9C/ValueVsReference/%EB%B3%80%EC%A4%80%EC%9B%90&amp;action=history"/>
	<updated>2026-05-15T01:20:42Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://mediawiki.zeropage.org/index.php?title=HardcoreCppStudy/%EC%B2%AB%EC%88%99%EC%A0%9C/ValueVsReference/%EB%B3%80%EC%A4%80%EC%9B%90&amp;diff=32080&amp;oldid=prev</id>
		<title>imported&gt;Unknown at 05:23, 7 February 2021</title>
		<link rel="alternate" type="text/html" href="https://mediawiki.zeropage.org/index.php?title=HardcoreCppStudy/%EC%B2%AB%EC%88%99%EC%A0%9C/ValueVsReference/%EB%B3%80%EC%A4%80%EC%9B%90&amp;diff=32080&amp;oldid=prev"/>
		<updated>2021-02-07T05:23:22Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;값에 의한 호출&lt;br /&gt;
변수가 매개변수로서 함수에 전달될 때 변수의 값만을 복사&lt;br /&gt;
원래의 값이 바뀌지 않음&lt;br /&gt;
&lt;br /&gt;
참조에 의한 호출&lt;br /&gt;
매개변수로 사용되는 변수에 대한포인터를 전달&lt;br /&gt;
함수내에서 매개변수로 사용되는 변수의 값을 변경&lt;br /&gt;
함수란 무엇인가?&lt;br /&gt;
&lt;br /&gt;
▶ 값에 의한 호출(Call by Value)&lt;br /&gt;
&lt;br /&gt;
C 언어에서 가장 기본적인 인수 전달 방법. &lt;br /&gt;
호출된 함수는 형식 매개 변수의 기억 장소를 별도로 유지. &lt;br /&gt;
함수를 호출하는 프로그램의 실 인수 값을 호출된 함수의 형식 인수에 복사해서 다른 지역 변수들과 동일하게 취급. &lt;br /&gt;
값에 의한 호출 기법에서는 실인수의 값이 절대로 변하지 않음. &lt;br /&gt;
&lt;br /&gt;
▶ 참조에 의한 호출 ( Call by Reference )&lt;br /&gt;
&lt;br /&gt;
참조에 의한 인수 전달 기법은 실 매개 변수의 주소를 호출된 함수에 대응하는 형식 매개 변수에 보내는 방법. &lt;br /&gt;
실인수의 값이 아니라 실인수의 주소를 전달 ( 형식 인수는 이 주소를 참조하여 실행 ) &lt;br /&gt;
참조에 의한 호출(call by reference, call by address, call by location) 방법은 가인수의 값을 변경시키면 실인수의 값도 변경 &lt;br /&gt;
반환되는 값이 여러 개이거나 배열 전체를 전달하는 경우에 주로 이용. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
함수란 자료에 동작을 가하고 값을 반환하는 부 프로그램으로 C++프로그램에서 빠지질 수 없는 함수가&lt;br /&gt;
바로 main()함수로 처음 시작할 때 main()이 자동적으로 불려지고 또 main()이 다른 함수를 부를 수가&lt;br /&gt;
있습니다.&lt;br /&gt;
먼저 함수에 대한 전반적인 소개를 하면..&lt;br /&gt;
&lt;br /&gt;
함수의 종류&lt;br /&gt;
1) 일반함수 &lt;br /&gt;
정의,선언,호출이 엄격히 구분되며 Compiler에 의해 처리되어 object file을 만들며 분할 Pro&lt;br /&gt;
gramming의 기초가 됩니다.&lt;br /&gt;
2) 매크로 함수&lt;br /&gt;
전처리계인 #define에 의해 정의되는 함수.&lt;br /&gt;
3) inline함수&lt;br /&gt;
매크로 함수의 특성을 갖지만 compiler에 의해 처리되며 일반함수와 동일한 매개변수 전달 방&lt;br /&gt;
법을 취합니다.&lt;br /&gt;
&lt;br /&gt;
함수간의 정보 전달 방법&lt;br /&gt;
1) 매개변수에 의한 방법&lt;br /&gt;
주로 함수와 함수간의 정보 전달 방법으로 쓰인다.&lt;br /&gt;
** 값에 의한 호출(Call by value)&lt;br /&gt;
매개변수의 값 자체를 전달 &lt;br /&gt;
** 포인터 참조에 의한 호출(Call by pointer reference)&lt;br /&gt;
매개변수의 주소를 전달&lt;br /&gt;
** 참조에 의한 호출(Call by reference)&lt;br /&gt;
실매개변수를 공유하여 참조&lt;br /&gt;
2) 외부변수에 의한 방법&lt;br /&gt;
주로 광역적으로 정보를 전달하거나 현 시스템의 상태등을 알고자 할 때 사용.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
일반함수에서 정의, 선언, 호출에 대해 예를 들면,&lt;br /&gt;
#include &lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
   double power(double base, int exponent);   // 함수의 선언(원형)&lt;br /&gt;
   double base,result;&lt;br /&gt;
   int exponent;&lt;br /&gt;
&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;밑수 및 지수를 입력하시오\n&amp;quot;; &lt;br /&gt;
   while (cin &amp;gt;&amp;gt; base &amp;gt;&amp;gt; exponent) &lt;br /&gt;
   {&lt;br /&gt;
       result = power(base, exponent);    // 함수의 호출&lt;br /&gt;
       cout &amp;lt;&amp;lt; &amp;quot;밑수(&amp;quot;&amp;lt;&amp;lt; base &amp;lt;&amp;lt;&amp;quot;)&amp;quot; &amp;lt;&amp;lt; &amp;quot;지수(&amp;quot;&amp;lt;&amp;lt; exponent &amp;lt;&amp;lt;&amp;quot;)&amp;quot; &amp;lt;&amp;lt; &amp;quot;결과 :&amp;quot;&amp;lt;&amp;lt; result &amp;lt;&amp;lt; endl;&lt;br /&gt;
   } &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
double power (double x, int y) // 함수의 정의 &lt;br /&gt;
{ &lt;br /&gt;
   double ans=&amp;quot;x&amp;quot;;&lt;br /&gt;
   for (int i=1;i &amp;lt; y;i++) &lt;br /&gt;
      ans*=&amp;quot;x&amp;quot;;&lt;br /&gt;
   return ans; &lt;br /&gt;
}&lt;br /&gt;
* 여기서 power(double x, int y) 안에서 따옴표가 없어야 할 거 같은데...? -영동&lt;br /&gt;
* 그리고 함수의 원형과 정의의 인자 이름을 같게 써 주는것이 가급적 좋을 것 같다. -영동&lt;br /&gt;
&lt;br /&gt;
위의 예제에서 함수의 선언부분인 double power(double base, int exponent); 에서 double은 반환값의 형&lt;br /&gt;
을 의미하고 power은 함수명을 의미하며 double base, int exponent은 매개변수를 의미한다. power()라는&lt;br /&gt;
함수의 원형이 있고 함수원형을 함수의 정의와 비교해보면 함수명,반환형, 매개변수형이 똑같습니다. 만일&lt;br /&gt;
다르다면 컴파일러 장애가 발생할 것입니다. 다른 점이 있다면 함수 원형은 마지막에 세미콜론으로 끝난다&lt;br /&gt;
는 것입니다.&lt;br /&gt;
&lt;br /&gt;
이제 전역 변수와 지역 변수에 대해 알아봅시다.&lt;br /&gt;
먼저 전역 변수란 것은 어떤 특정 함수의 바깥에서 정의된 변수는 전역 범위 규칙을 가지고 main()함수를 &lt;br /&gt;
포함하여 프로그램내 어디서나 사용이 가능합니다. 이에 반해 지역변수는 함수몸체 안에서 선언하는데 이&lt;br /&gt;
지역변수란 그 함수 안에서만 존재합니다. &lt;br /&gt;
&lt;br /&gt;
다음의 예를 봅시다.&lt;br /&gt;
#include &lt;br /&gt;
&lt;br /&gt;
void mytest();         // 함수원형&lt;br /&gt;
 int x=1,y=2;           // 전역변수&lt;br /&gt;
&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;x=&amp;quot;&amp;lt;&amp;lt; x &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; cout &amp;lt;&amp;lt; &amp;quot;y=&amp;quot;&amp;lt;&amp;lt; y &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; mytest(); // 함수선언 &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;x=&amp;quot;&amp;lt;&amp;lt; x &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; cout &amp;lt;&amp;lt; &amp;quot;y=&amp;quot;&amp;lt;&amp;lt; y &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; &lt;br /&gt;
} &lt;br /&gt;
&lt;br /&gt;
void mytest() // 함수정의 &lt;br /&gt;
{ &lt;br /&gt;
    int x=&amp;quot;3;&amp;quot; // 지역 변수 &lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;this x=&amp;quot;&amp;lt;&amp;lt; x &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; cout &amp;lt;&amp;lt; &amp;quot;this y=&amp;quot;&amp;lt;&amp;lt; y &amp;lt;&amp;lt;&amp;quot; \n&amp;quot;; &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
출력은 다음과 같다.&lt;br /&gt;
x=1&lt;br /&gt;
y=2&lt;br /&gt;
this x=3&lt;br /&gt;
this y=2&lt;br /&gt;
x=1&lt;br /&gt;
y=2&lt;br /&gt;
함수 mytest 내의 지역변수로 선언한 x의 값이 3이 되므로 this x=3이 되고 그 외의 값들은 모두 전역변수&lt;br /&gt;
로 선언되어 있기 때문에 같게 나오는데 여기서 주의 해야 할 것은 C++에서는 전역변수를 거의 쓰지를 않는&lt;br /&gt;
다는 것인데 이유는 전역변수는 공유되 자료이기 때문에 어느 함수 하나가 다른 함수 모르게 전역변수를 바&lt;br /&gt;
꿀 수 있기 때문입니다. 그래서 나중에 버그가 나면 잡기도 힘들고 나중에 유지, 보수 하기가 쉽지가 않기 &lt;br /&gt;
때문입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
이제 함수의 매개변수 전달방법을 알아봅시다.&lt;br /&gt;
값에 의한 호출방법(Call by value )&lt;br /&gt;
: 매개 변수의 전달시 매개변수의 값을 전달하는 것으로 실매개변수가 호출된 함수에 의해 영향을&lt;br /&gt;
  받지 않습니다.&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
    void test(int, int);        // 함수 선언&lt;br /&gt;
    int a = 10, b = 20;&lt;br /&gt;
    test(a,b);                  // 함수 호출&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;a=&amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt;&amp;quot; &amp;quot; &amp;lt;&amp;lt; &amp;quot;b=&amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void test(int x, int y)       // 함수 정의&lt;br /&gt;
{ &lt;br /&gt;
    int temp;&lt;br /&gt;
    temp = x;&lt;br /&gt;
    x = y;&lt;br /&gt;
    y = temp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
결과는 a=10 b=20이지만 내부적으로 x와 y의 값은 20, 10이다.&lt;br /&gt;
결국 실매개변수가 호출함수에 의해 값이 변하지 않는다는 것을 알 수 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
포인터 참조에 의한 호출(Call by point reference)&lt;br /&gt;
: 대상 객체의 주소값을 전달하는 방식으로 형식 매개변수에 포인터 변수가 사용된다.&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
    void test(int*, int*);        // 함수 선언&lt;br /&gt;
    int a = 10, b = 20;&lt;br /&gt;
    test(&amp;amp;a,&amp;amp;b);          // 함수 호출, a와b의 주소값을 전달&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;a=&amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt;&amp;quot; &amp;quot; &amp;lt;&amp;lt; &amp;quot;b=&amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void test(int *x, int *y)       // 함수 정의&lt;br /&gt;
{ &lt;br /&gt;
    int temp;&lt;br /&gt;
    temp = *x;&lt;br /&gt;
    *x = *y;&lt;br /&gt;
    *y = temp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
결과는 a=20 b=10이 되고 x는 a의 주소값을 가지고 y는 b의 주소값을 가지게 된다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
참조에 의한 호출(Call by reference)&lt;br /&gt;
: 참조형을 이용하여 매개변수를 전달하는 것으로 함수호출시 형식매개변수인 참조형이 실매개 변&lt;br /&gt;
  수로 초기화되어 함수 내부에서 실매개변수를 참조하여 사용할 수 있다.&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;iostream.h&amp;gt;&lt;br /&gt;
void main()&lt;br /&gt;
{&lt;br /&gt;
    void test(int&amp;amp;, int&amp;amp;);        // 함수 선언&lt;br /&gt;
    int a = 10, b = 20;&lt;br /&gt;
    test(a,b);                  // 함수 호출, 형식매개 변수인&lt;br /&gt;
    cout &amp;lt;&amp;lt; &amp;quot;a=&amp;quot; &amp;lt;&amp;lt; a &amp;lt;&amp;lt;&amp;quot; &amp;quot; // 참조형이 실매개 변수로 초기화 &amp;lt;&amp;lt; &amp;quot;b=&amp;quot; &amp;lt;&amp;lt; b &amp;lt;&amp;lt; endl;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void test(int &amp;amp;x, int &amp;amp;y)        // 함수 정의&lt;br /&gt;
{ &lt;br /&gt;
    int temp;&lt;br /&gt;
    temp = x;&lt;br /&gt;
    x = y;&lt;br /&gt;
    y = temp;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
결과적으로 a=20 b=20이 되는데 결국 함수내부에서 실매개변수를 참조하여 사용하는 것입니다.&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;Unknown</name></author>
	</entry>
</feed>