반응형
포인터를 이용하면 함수내에서 외부에 있는 변수에 직접 접근이 가능하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> void CallByVal(int num) { num++; } void CallByRef(int * ptr) { (*ptr)++; } int main(void) { int val=10; CallByVal(val); printf("CallByVal: %d \n", val); CallByRef(&val); printf("CallByRef: %d \n", val); return 0; } | cs |
1 2 | CallByVal: 10 CallByRef: 11 | cs |
3행에서 이 함수가 하는 일은 매개변수인 num에 저장된 값을 1증가시키는게 전부다.
즉 val과 num은 별개의 변수인것이다. 따라서 main함수에 선언된 변수 val에 아무런 영향을 안 미친다.
이렇게 변수에 저장된 값을 복사해서 전달하는 형태의 함수호출을 가리켜 값에 의한 호출
Call-By-Value 라 한다.
하지만 8행에서 주소값을 입력 받고, 받은 주소값의 메모리에 저장된 값을 1증가시킨다.
결과적으로 메인함수에서 선언된 변수 val의 값이 1증가한다.
이렇게 주소 값을 전달하는 형태의 함수 호출을 가리켜 참조에 의한 호출 Call-By-Reference라 한다.
여기서 참조란 포인터를 의미한다.
포인터는 변수를 참조할 수 있는 매개체이기 때문이다.
따라서 이를 포인터에 의한 호출 Call-By-Pointer 이라고도 한다.
반응형
'BackEnd > C' 카테고리의 다른 글
메모리 공간의 동적 할당 (1) | 2019.03.14 |
---|---|
자료형에 이름을 부여하는 typedef 키워드 (0) | 2019.03.14 |
다차원 배열 이름의 포인터형 (0) | 2019.03.14 |
배열의 이름은 상수 형태의 포인터이다. (0) | 2019.03.13 |
제한된 형태의 포인터 연산 (0) | 2019.03.13 |