C/포인터

함수와 포인터

appmaster 2019. 12. 5. 13:43

데이터를 전부 복사해서 함수로 넘기는 것보다 데이터가 있는 위치를 포인터로 알려주는편이 훨씬 효율적이다.

 

일반적으로 외부로부터 데이터를 받는 방법에는 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