소개

C 언어에서 함수의  매개 변수로 포인터를 사용하는 방법을 살펴보겠습니다.

void change(int sender)

-에서-

void change(int *sender)

-으로-

바뀐 부분에 대한 내용을 다루겠습니다. 

 

따라하기

지금까지 우리가 사용해 온 함수의 매개 변수는 값 전달 방식입니다. 즉, 값만 던져주는 형태입니다.

이번에 살펴볼 함수의 매개 변수로 포인터를 사용하는 방식은 참조 전달 방식으로 값이 저장되는 위치만 알려주고 함수 내에서 해당 변수를 사용하고 해당 변수의 값을 변경하게 되면, 호출된 함수 밖에 있는 전달한 쪽에서도 값이 변경될 수 있습니다. 

<코드> pointer_parameter.c

#include <stdio.h>

void change(int *sender) //[A] 포인터 매개 변수
{
    printf("[2] 함수:전송 값: %d\n", *sender);
    *sender = 4321; // 값을 수정하면 참조하고 있던 원본 데이터가 변경됨
    printf("[3] 함수:바뀐 값: %d\n", *sender);
}

int main(void) 
{
    int origin = 1234; //[!] 데이터 저장소는 메인 함수에서만 관리
    printf("[1] 메인:원본 값: %d\n", origin);
    change(&origin); //[B] 참조로 전달(주소 전달, 실제 데이터 보관은 메인에서 관리)
    printf("[4] 메인:바뀐 값: %d\n", origin);

    return 0; 
}

pointer_parameter.png

</코드>
<실행>

[1] 메인:원본 값: 1234

[2] 함수:전송 값: 1234

[3] 함수:바뀐 값: 4321

[4] 메인:바뀐 값: 4321

</실행>

함수의 매개 변수로 int sender 대신에 int *sender로 포인터로 만들었습니다.

void change(int *sender) {}

포인터 매개 변수는 호출할 때 반드시 &origin 형태로 넘겨주는 변수의 값이 아닌 주소를 지정해야 합니다.

change(&origin);

함수 안에서 역참조로 포인터 매개 변수의 값을 변경하면 그 순간에 넘겨준 원본 변수의 값도 변경이 됩니다.

*sender = 4321;

이렇게 포인터 매개 변수는 값 전달이 아닌 주소를 전달하는 참조 전달 방식입니다. 참조 전달 방식의 특징은 값을 보관을 메인과 같이 호출한 쪽에서 관리하고 함수에서는 로직만 처리하고 값을 보관하는 기능은 하지 않는 형태입니다.

//[!] 데이터 저장소는 메인 함수에서만 관리
int origin = 1234

 

 

 

 

 

 

 

 

 

 

 

 

Comments


Comments are closed