본문 바로가기
공학/C

함수와 포인터

by 둥둥잇 2014. 11. 18.

* 함수 호출 시 인수 전달 방식

- 값에 의한 호출 call by value

- 참조에 의한 호출 call by reference


* swap 함수

void swap(int x, int y)

{

int tmp;


tmp = x;

x = y;

y = tmp;

}


* 값에 의한 호출

void swap(int x, int y);


int main(void)

{

int a = 100, b = 200;

printf("swap() 전 a = %d, b = %d, a, b);

swap(a, b);

printf("swap() 후 a = %d, b = %d, a, b);

return 0;

}


void swap(int x, int y)

{

int tmp;


printf(swap() x = %d, y = %d, x, y);


tmp = x;

x = y;

y = tmp;


printf(swap() x = %d, y = %d, x, y);

}


----실행 결과

swap() 전 a = 100, b = 200

swap() x = 100, y = 200

swap() x = 200, y = 100

swap() 후 a = 100, b = 200


=> C에서의 함수 호출은 '값에 의한 호출'

함수 매개변수로 변수의 값만 전달했기 때문에 원본 변수 자체를 변경 X

x, y 와 값은 바꿨지만 변수 a, b에는 전혀 영향을 못 끼침


* 참조에 의한 호출

원본이 직접 전달되어 호출된 함수 안에서 매개 변수 값을 수정하면 원래 변수가 똑같이 수정


void swap(int *px, int *py);


int main(void)

{

int a = 100, b = 200;

printf("swap() 전 a = %d, b = %d, a, b);

swap(&a, &b);

printf("swap() 후 a = %d, b = %d, a, b);

return 0;

}


void swap(int *px, int *py);

{

int tmp;


tmp = *px;

*px*py;

*py = tmp;

}


----실행 결과

swap() 전 a = 100, b = 200

swap() 후 a = 200, b = 100


- 주소를 받을 수 있는 자료형은 포인터!!


* 포인터를 반환

- 함수의 반환값으로 포인터가 사용될 수 있지만,

   함수가 종료되더라도 남아 있는 기억 장소를 반환해야함

지역변수는 함수 호출이 종료되면 소멸되는 것을 기억!!!



'공부 > C' 카테고리의 다른 글

공용체  (0) 2014.11.18
구조체  (0) 2014.11.18
포인터  (0) 2014.11.18
배열  (0) 2014.11.18
저장 유형 지정자  (0) 2014.11.18

댓글