Pages

Saturday, February 3, 2018

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

C/C++ 언어 코딩 복습 - 호출 방법 2 (Call by address)

주소에 의한 호출 (call by address) :

- 함수를 호출할 변수의 주소 값을 넘겨주는 방식입니다. 간단한 예를 살펴보겠습니다.

예제코드

#include <iostream>
using namespace std;

void TcallA(int *);

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

     TcallA(&a);
     cout <<" (2) In main function  : "<< "  a  = " << a << ", address of a = "<< &a << endl;
     return 0;
}

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

- 인자가 포인터 변수인 TcallA 함수를 정의하였습니다. 함수의 프로토 타입의 인자가 포인터 이므로 '*' 붙여 나타내었습니다.

- TcallA 함수는 주소값 (int *b) 인자로 넘겨받고, 주소가 가리키는 곳의 값을 하나 증가 시키는 일을 합니다 (*b += 1;). 증가된 값과 포인터 변수의 주소를 출력하도록 하였습니다.

- main 함수에 정수형 변수 'a' 선언하고 1 대입하였습니다. 그리고 먼저 'a' 값과 변수 'a' 주소를 출력하도록 하였습니다.

- TcallA 함수를 호출할 변수 'a' 주소값을 인자로 주었습니다 ( TcallA(&a); ). 그리고 다시 한번 변수 'a' 값과 주소를 출력하도록 하였습니다.

실행결과


- 첫번째 줄에서는 main 함수에서 정의한 변수 'a' 대입되어 있는 (a = 1) 주소값이 출력 되었습니다.

- 두번째 줄에서는 'call by address' 방식으로 작성된 함수 TcallA 결과가 나타나 있습니다. 포인터 변수 b 가리키는 곳의 값이 1 증가되어 (b = 2) 출력되었고 포인터 변수 b 주소값 출력되었습니다. main 함수에서 정의된 변수 'a' 주소값과 다름을 있습니다.

- 세번째 줄에서는 main 함수의 변수 'a' 대한 결과가 출력되었습니다. 변수 'a' 값이 2 바뀌었음을 있습니다. 물론 주소값은 첫번째 줄과 동일한 값으로 'a' 저장된 값만 바뀐 것을 있습니다.

No comments:

Post a Comment