포인터를 배울 때 자주 등장하는 Swap 함수를 참조형으로 구현할 수 있다.


 Swap() 함수는 두개의 인자를 받아서 값을 맞바꾸는 함수다.


 Swap1() 함수는 함수 내에서 변경된 값이 함수가 종료되면 main() 함수에 영향을 주지 않는다. 쉽게 말해서 지역변수이다.

 

아래의 개념과 예제를 보고 이해하기.

Call by Value (값에 의한 호출) : 인자로 값을 복사하여 넘겨 받았으므로 (지역변수인) 두 값을 변경해도 메인함수에 영향이 없다.

Call by Reference (주소에 의한 호출) : 메모리 주소를 받아와서 실제 해당 포인터가 가르키고 있는 값을 변경한다. 따라서 메인함수로 돌아와도 해당 메모리 주소를 사용하는 변수가 가진 값이 변경되어 있다. 



#include <iostream>

using namespace std;


void Swap1(int v1, int v2)

{

int temp;

temp = v1;

v1 = v2;

v2 = temp;

}


void Swap2(int *v1, int *v2)

{

int temp;

temp = *v1;

*v1 = *v2;

*v2 = temp;

}


void Swap3(int &v1, int &v2)

{

int temp;

temp = v1;

v1 = v2;

v2 = temp;

}


void main(){

int a, b;

a=100;

b=200;


Swap1(a,b);

cout << a << " : " << b << endl;


Swap2(&a,&b);

cout << a << " : " << b << endl;


Swap3(a,b);

cout << a << " : " << b << endl;


system("pause");

}


'프로그래밍 > C++' 카테고리의 다른 글

범위지정 연산자 (Scope Resolution Operator)  (0) 2013.07.20
이름공간(namespace) 기본형  (0) 2013.07.20
입력 받은 수의 구구단 출력  (0) 2013.07.19
포인터  (0) 2013.06.01
참조 연산자(&)와 참조 변수  (0) 2013.03.29
인라인(inline) 함수  (0) 2013.03.28
동적 메모리 이용  (0) 2013.03.27

 참조형은 변수에 대한 별명을 만드는 것입니다. 같은 메모리 주소를 가르키지만 이름이 다른 변수를 선언한다고 보면 됩니다.


참조 변수를 선언하는 기본 형태는 아래와 같습니다.


 int nValue;
 int &nVal = nValue;


 참조 변수는 이미 선언한 다른 변수를 참조합니다. 원래 변수 값을 바꿀 수도 있습니다.


#include <iostream>

using namespace std;


void increase1(int *nVal) //포인터 인자

{

(*nVal)++;

}


void increase2(int nVal) //정수형 인자

{

nVal++;

}


void increase3(int &nVal) //참조형 인자

{

nVal++;

}


void main(){


int nValue=10;


increase1(&nValue); //포인터 인자를 가진 함수를 부를 때는 메모리 주소 혹은 포인터를 넘김

cout << nValue << endl;

increase2(nValue); //데이터형에 맞는 변수를 넘김

cout << nValue << endl;


    increase3(nValue);         //참조형 인자를 가진 함수를 부를 때는 반드시 변수를 넘김

cout << nValue << endl;


system("pause");

}


 C언어는 함수에서 바꾼 값을 받아오려면 포인터를 이용해야 합니다. C++에서는 포인터 또는 참조를 이용해서 함수 내에서 바꾼 값을 받아옵니다.

'프로그래밍 > C++' 카테고리의 다른 글

범위지정 연산자 (Scope Resolution Operator)  (0) 2013.07.20
이름공간(namespace) 기본형  (0) 2013.07.20
입력 받은 수의 구구단 출력  (0) 2013.07.19
포인터  (0) 2013.06.01
Swap 함수  (0) 2013.03.30
인라인(inline) 함수  (0) 2013.03.28
동적 메모리 이용  (0) 2013.03.27

 일반적인 함수는 함수를 부르는 순간 함수 코드로 이동해서 실행합니다. 함수가 종료되면 다시 함수를 부른 곳으로 돌아가서 다음 코드를 실행합니다. 하지만 인라인 함수는 함수를 부르는 것이 아닌 함수 코드를 복사해서 넣습니다. 함수를 여러 번 부르게 되면 같은 코드가 여러 번 복사되어 들어갑니다. 보통 한 두 줄 정도의 간단한 코드를 인라인 함수로 만듭니다. 함수를 불러서 함수 코드로 이동하여 실행 후 되돌아오는 시간을 줄여서 좀 더 효율적인 프로그램을 만들기 위함입니다.


#include <iostream>

using namespace std;


inline int GetPlusOne(int val) { return val+1; }


void main(){


int value = 100;


//인라인 함수는 함수를 부르는 것이 아니라 함수 코드를 직접 복사해서 넣습니다.


value = GetPlusOne(value); // value = value + 1;

cout << value << endl;


value = GetPlusOne(value);// value = value + 1;

cout << value << endl;


value = GetPlusOne(value);// value = value + 1;

cout << value << endl;


system("pause");

}




'프로그래밍 > C++' 카테고리의 다른 글

범위지정 연산자 (Scope Resolution Operator)  (0) 2013.07.20
이름공간(namespace) 기본형  (0) 2013.07.20
입력 받은 수의 구구단 출력  (0) 2013.07.19
포인터  (0) 2013.06.01
Swap 함수  (0) 2013.03.30
참조 연산자(&)와 참조 변수  (0) 2013.03.29
동적 메모리 이용  (0) 2013.03.27

+ Recent posts