데이터를 전부 복사해서 함수로 넘기는 것보다 데이터가 있는 위치를 포인터로 알려주는편이 훨씬 효율적이다.
일반적으로 외부로부터 데이터를 받는 방법에는 2가지가 있다.
* 값에 의한 호출(call-by-value) : 함수가 호출될 때 복사본이 함수로 전달되면 값에 의한 호출이다. 함수 안에서 매개변수를 변경하여도 원본에는 영향을 주지않는다.
* 참조에 의한 호출(call-by-reference) : 만약 함수가 호출될 때 원본을 함수로 전달하는 방법이다. 함수 안에서 매개변수를 변경하면 원본 변수가 변경된다.
C언어에서는 기본적으로 값에 의한 호출만 가능하다.
<값에 의한 호출>
#include <stdio.h>
void modify(int value){
value = 99;
}
int main(void){
int number = 1;
modify(number);
printf("number = %d\n", number);
return 0;
}
=======> 출력값
number = 1
<참조에 의한 호출>
#include <stdio.h>
void modify(int *ptr){
*ptr = 99;
}
int main(void){
int number = 1;
modify(&number); //주소를 계산해서 보낸다.
printf("number = %d\n", number);
return 0;
}
=========> 출력값
number = 99;
modify() 함수를 호출할 때 number 변수의 주소를 계산하여 전달하였다. 변수의 주소를 전달하였기 때문에 modify() 함수에서 주소를 이용하여 원본 변수의 값을 변경할 수 있었다.
'C > 포인터' 카테고리의 다른 글
포인터 사용시 주의해야할 점 (0) | 2019.12.05 |
---|---|
포인터를 더 활용해보기 (0) | 2019.08.12 |
포인터 매개변수에 대해 (0) | 2019.08.12 |