어떤 함수의 내부에서 호출하는 쪽의 변수를 직접 조작하려면 그 변수의 포인터를 넘겨받으면 된다. 이렇게 변수의 포인터를 넘겨 받아서 호출하는 함수의 변수를 직접 접근하는 방식을 참조에 의한 호출(call-by-reference) 라고 한다. 프로그래밍에서 참조(reference)라는 용어는 주소(address)와 거의 같은 의미로 사용된다.
다음 예제를 살펴보자.
#include <stdio.h>void addOne(float *); // 함수 선언int main(){float fa = 10.0f;addOne(&fa);printf("fa=%f\n",fa);}void addOne(float *fpa){*fpa += 1.0f;} |
이 예제에서 addOne()함수는 float형 포인터를 받아서 fpa에 저장한다. addOne()함수에 &fa 를 넘긴 것을 눈여겨 보아야 한다. 그리고 내부에서 *fpa 값을 1,0만큼 증가시킨다. 하지만 addOne() 함수의 *fpa 는 main()함수의 fa 변수와 같다. 따라서 fa변수를 직접 조작하는 효과가 나는 것이다. 실행 결과를 보면 다음과 같다.
fa=11.000000 |
함수를 선언할 경우에는 굳이 인자의 이름을 써 줄 필요가 없고 인자의 자료형만 밝혀주면 된다. 위의 예제에서
void addOne(float *fpa);void addOne(float *);//이렇게 인자의 이름 fpa를 생략해도 됨 |
라고 addOne()함수를 선언했는데 이 함수의 첫 번째 인자가 float형 포인터(float *)라고 명시한 것이다.
다른 예로 두 변수의 값을 바꾸는 swap()함수를 작성해 보자.
#include <stdio.h>void swap(int*, int*); // 함수 선언int main(){int ia = 11, ib = 22;swap(&ia, &ib);printf("ia=%d, ib=%d\n", ia, ib);}void swap(int *ipa, int *ipb){int itmp = *ipa;*ipa = *ipb;*ipb = itmp;} |
ia = 22, ib = 11 |
이 예에서 swap()함수는 두 개의 int형 포인터를 받는다. 그리고 그 내부에서 *ipa와 *ipb 값을 교환했는데 이는 main()함수에서 ia, ib를 바꾼 것과 같은 효과를 가진다.
C++ 강좌 전체 목록 >>>
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
C/C++ 포인터 사용시 주의할 점 (0) | 2015.05.18 |
---|---|
C/C++의 함수가 포인터를 반환하는 경우 (0) | 2015.05.18 |
6.3 포인터 연산 (덧셈, 뺄셈) (0) | 2015.05.18 |
6.2 포인터 선언과 초기화 (0) | 2015.05.18 |
C++ 의 #define 전처리문을 이용한 매크로(macro) 정의 (0) | 2015.05.18 |