Pages

Saturday, February 3, 2018

C/C++ 언어 프로그래밍-호출방법1

C/C++ 언어 코딩 복습 - 호출 방법 1 (Call by value, call by reference) http://blogimgs.naver.net/imgs/nblog/spc.gif

- 함수들을 이용할 때 데이터들을 넘겨주는 방식에 대해 알아보겠습니다. 대표적인 방식으로는 값에 의한 호출 (call by value), 참조에 의한 호출 (call by reference), 주소에 의한 호출 (call by address) 이 있습니다.

값에 의한 호출 (call by value) :

- 이전까지 주로 사용하던 방식으로 함수를 호출할 때 변수 자체를 넘기는 것이 아니라 변수에 저장된 값만을 값만 넘겨주는 방식입니다. 간단한 예를 살펴보겠습니다.

예제코드

#include <iostream>
using namespace std;

void TcallV(int);

int main() {
     int a ;
     a = 1;
     TcallV(a);
     cout <<" In main function  : "<< "  a  = " << a << ", address of a = "<< &a << endl;
     return 0;
}

void TcallV(int a){
     a += 1;
     cout <<" Call by value     : "<< "  a  = " << a << ", address of a = "<< &a << endl;
}

- 정수형 인자 하나를 갖고 반환값이 없는 TcallV 함수를 선언하였습니다. 이 함수에서는 넘겨받은 정수형 인자에 1을 더해서 (a += 1;) 다시 대입하도록 하였습니다. 그리고 'a' 의 값과 주소값을 출력 하도록 하였습니다.

- main 함수에서 정수형 변수 'a' 를 선언하고 1을 대입하였습니다. 그리고 TcallV 함수의 인자로 'a' 를 주었습니다. 그 다음 메인 함수의 'a' 의 값과 주소값을 출력하도록 하였습니다.

실행결과


- TcallV 함수의 결과로 " Call by value    :   a  = 2" 라는 결과가 출력되었습니다. main 함수의 변수 'a' 의 값 1을 넘겨받아 TcallV 함수의 변수 'a' 에 1을 대입하고 'a +=1;' 이라는 문장을 수행해 결과로 2 라는 값을 출력하였습니다. TcallV 함수의 변수 'a' 의 주소값은 "0x7ffd01c5d8bc " 라고 출력 되었습니다.

- main 함수에서 출력된 변수 'a' 의 값은 1 이라는 결과를 얻었습니다. 즉, main 함수의 변수 'a' 와 TcallV 함수의 변수 'a' 는 서로 다른 독립적인 변수임을 알 수 있습니다. 또한 두 변수의 주소값을 확인해보면 서로 다름을 알 수 있습니다.

참조에 의한 호출 (call by reference) :

- 같은 변수를 다른 이름 (별칭) 으로 사용하고 싶을 때 사용되는 방법입니다. 사용법은 다음과 같습니다.

사용법
int a = 1;
int &b = a;

- 정수형 변수 a 를 선언하고 1 을 대입합니다. reference 변수 b (&b) 를 선언하고 앞에서 선언한 a 를 지정합니다. 앞으로 a 를 b 라는 이름으로도 사용하겠다는 의미 입니다.

- 간단한 예로 살펴보겠습니다.

#include <iostream>
using namespace std;

void TcallR(int &);

int main() {
     int a ;
     a = 1;
     TcallR(a);
     cout <<" In main function  : "<< "  a  = " << a << ", address of a = "<< &a << endl;
     return 0;
}

void TcallR(int &b){
     b += 1;
     cout <<" Call by reference : "<< "  b  = " << b << ", address of b = "<< &b << endl;
}

- TcallR(int &b) 함수 정의부분에서 전달받는 인자의 형태를 &b 로 지정하였습니다. 즉, 전달받는 매개변수를 다른 이름으로 사용하겠다는 것입니다. 결과를 확인해보겠습니다.

실행결과


- TcallR 함수의 'b' 와 main 함수의 'a' 둘다 2 의 값이 대입되어 있고 출력되는 것을 볼 수 있습니다. 또한 주소값이 동일함을 알 수 있습니다.

- 즉, TcallR 함수 내에서 main 함수의 변수 'a' 를 변수 'b' 의 이름으로 사용하고 있다는 것입니다.

No comments:

Post a Comment