공부하자/C언어

C언어 문법 공부 8장 [포인터 사용 용도]

YoBot 2016. 11. 20. 19:31

7. 포인터 사용 용도

지금까지 포인터에 대해 배웠습니다.

그런데 이 포인터를 과연 어디에 써먹을수 있을까요?


저번 강좌에서 일반 변수를 함수 호출시 인수로 전해주면

단지 변수에 들어있는 값을 복사해서 전해주는 Passing by value라는 호출 방법을 쓴다는 것을 배웠습니다.


그리고 배열의 경우 그 주소를 전해 주는 Passing by reference라는 방법을 쓴다는 것도 알았죠.

그럼 일반 변수를 Passing by reference로 전해 줄수는 없을까요?


포인터를 이용하면 이것이 가능합니다.


우선 방법을 알아보기 전에 예제 하나를 보죠. 

/* 파일 이름 : C9-2.C프로그램 내용 : 포인터 예제. */


#include <stdio.h>

void func(int data){

data=10;

}


void main(){


int var=1;


func(var);


printf("%d\n",var);

이 소스는 Passing by value를 사용하는 함수 예제 입니다.


func함수에서는 data를 10으로 바꿨지만 main함수의 var은 바뀌지 않고 결국엔 1이 출력되죠.


그럼 이걸 Passing by reference로 바꿔 보죠.


바꿀려면 과연 어떻게 해야 할까요? 우선 func함수 부터 고쳐야 겠죠?


Passing by reference는 주소를 전달 받는 것이니 인수를 포인터로 바꿔주어야 겠군요. 


void func(int* data){

data=10;

이렇게 말이죠. 그런데 여기서 바꿀게 하나 더 남았죠? 

data는 이제 포인터이므로 사용시에는 참조 연산자를 써서 사용해야 겠죠?


즉 

void func(int* data){

*data=10;

이렇게 바꿔야 하죠. 그럼 func함수는 다 고쳤네요.


그런데 main함수에서도 바꿀게 있죠? func함수를 호출할 때 그냥 변수를 보내면 않되고 주소를 보내야 하잖아요.


그러므로 

func(&var); 

이렇게 호출해주면 되겠죠?


이렇게 해서 바꾼 소스를 보도록 하죠. 

/* 파일 이름 : C9-3.C프로그램 내용 : 포인터 예제. */


#include <stdio.h>

void func(int* data) {

*data=10;

}


void main(){


int var=1;

func(&var);


printf("%d\n",var);

이렇게 되겠내요. 그럼 이젠 Passing by reference로 호출하게 됩니다.


그러므로 1이 아닌 10이 출력되게 되죠. 

이렇게 해서 이번 강좌는 마치도록 하겠습니다.


다음 강좌에서는 포인터와 배열의 관계에 대해 알아보죠.