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' 에 저장된 값만 바뀐 것을 알 수 있습니다.