함수의 이해 / 데이터 전달

언어로그/C/C++ 2010. 12. 10. 19:50

1. 함수가 필요한 이유?

  • 중복된 작업을 함수로 분리하면, 한번 작성으로 여러번 사용할 수 있어서 효율적인 프로그램이 된다.
  • 또한 큰 문제를 작은 문제들로 나누어 이해하기 쉬워지며, 수정사항이 발생하면 함수 부분만 수정하면 되기 때문에 유지보수도 용이해진다.


2. 함수의 원형(프로토타입)과 정의

  • C언어에서 함수는 원형(프로토타입)과 정의로 분리된다.
  • 함수의 원형(프로토타입)은 보통 헤더파일이나 메인함수 이전에 선언이 되며, 컴파일러에게 이러 이러한 함수를 아래에 정의했으니까 메인함수 또는 특정함수에서 이 함수를 사용해도 됨을 알려주는 것이다.
  • 함수의 정의는 실제적으로 함수가 하는 일을 기술하는 부분이다. C언어에서는 함수의 시그니처로 함수의 이름만을 사용하기 때문에, 파라미터의 타입과 반환값의 타입이 달라도 동일한 이름의 함수를 사용 할 수 없다.
#include <stdio.h>

void swap(int , int);// 함수원형(프로토타입)   

int main() {
...

return 0;

}
void swap(int a, int b) {   // 함수의 정의         
...

}  


3. Call By Value vs Call By Reference

  • 함수 호출시 파라미터를 넘기는 방식에 따라 Call By Value 또는 Call By Reference 라고 구분한다.
  • 함수 호출시 변수들의 데이터(값)가 복사되는데, 함수 내에서 이 복사된 변수에 대한 조작은 원본 변수에 아무런 영향을 미치지 못하는데 이러한 호출방식을 Call By Value라고 부른다.
  • 파라미터로 변수의 주소를 넘기면, 피호출자 쪽에서는 이 주소를 조작하여 원본 변수의 데이터를 변경할 수 있다. 이러한 호출방식을 Call By Pointer 또는 Call By Reference 라고 부른다.


Call By Value

main() {
    int a = 1, b = 5;

    swap(a, b);// 변수의 값을 전달함 

    }
    void swap(int a, int b)  {// main함수의 a, b는 변경되지 않음    
    int temp = a;

    a = b;

    b = temp      

}


Call By Reference

main()  {
   int a = 1, b = 5;
   swap(&a, &b);// 변수의 주소를 전달함    

}

void swap(int *a, int *b)  { // main함수의 a, b가 변경됨    
    int temp = *a;
    *a = *b;
    *b = temp;
}


'언어로그 > C/C++' 카테고리의 다른 글

C 프로그램 실행과정  (0) 2011.02.22
C 언어란?  (0) 2011.02.22
비트필드  (0) 2010.12.10
함수의 이해 / 데이터 전달  (0) 2010.12.10
과제 #3 함수, 포인터의 사용  (0) 2010.12.10
과제#4 배열과 문자열  (0) 2009.10.03