본문 바로가기
Ghost의 Linux C Note(노트)/Ghost의 Linux C언어 사칙연산

함수를 이용한 사칙?.... ~ㅇ~

by dark ghost 2012. 5. 20.
728x90
반응형

 

함수를 이용한 사칙연산.

 

1. 위 소스는 함수를 이용하여 간단한 사칙연산을 하는 프로그램을 짠 것이다.

         int plus (int, int)

2. #include <stdio.h> 아래에 보면 int plus (int, int)라는 구문으로 시작해서 같은 구문이 3개가 더 있는데 이 구문은 함수를 사용 하기 위해서 선언 한것이다. 그 중에서 빨간 네모 부분만 보자면 반환 자료형은 int니 정수로 반환 한다는 것이고 함수 이름은 plus다. 그리고 () 안에 인자들은 반환 자료형이 정수형 int이니 형 동등성에 의해 같은 타입인 int가 들어 간것이다. 그런데 인수리스트에 받는 인자 값이 두개인 이유는 main() 함수를 보면 변수가 2개가 있는 것이 보인다. 각각 변수에 수를 입력 받기 때문에 plus함수에서도 인자 값을 2개 받는 것이다.

       int (*handler) (int, int)

3. int (*handler) 포인터 구문은 함수의 주소 값을 닮게 된다. 역시 입력을 2개 받게 되기 때문에 받는 인자 값이 2개가 있는 것이다. 그리고 앞에 *이 있기 때문에 따라 가서 거기에 있는 주소를 담게 된다. 한마디로 그 주소에 값이 들어 있다면 그 값도 가지고 오게 된다.

       if (op ==  '+')

      {

         handler = plus;

      }

4. if문은 문자 '+'나 아님 '-' 같은 문자를 입력 받게 되면 각각에 해당하는 함수를 호출하게 된다. 그래서 그 호출값을 handler라는 포인터 함수에 넣게 되면 plus 함수의 값을 저장하게 된다.

     printf("the result is %d.\n", (*handler) (num1, num2));

5. printf문이 중요한데 왜냐하면 위에서 *handler 포인터 변수를 사용한 이유가 있기 때문이다. 만약 *handler문이 없다면 각각 printf문으로 plus함수와 minus 함수 출력을 각각 따로 만들어야 되므로 소스가 더 길어지게 된다. 그래서 *handler 포인터 변수가 추가 됨에 있어 프로그램이 더 간결 해질수 있다는 것을 알게 해준다.

 int plus (int a, int b)

{

return (a + b);

}

6. #include <stdio.h> 아래에 int plus (int, int); 부분은 함수를 사용 하겠다고 선언만 된 부분이라면 이 부분은 함수를 어떻게 사용 할지를 정할 수 있는 부분이다. 일반적으로 변수는 선언과 정의를 따로 구분하지 않고 쓰지만 함수는 엄연히 선언부과 정의부가 따로 구분 되어 있다. 이 부분이 바로 함수의 정의부이며, plus 함수에 2개의 인자 값을 받아 return문에 a+b의 더한 값을 리턴 하겠다고 정의 해 놓았다. 그래서 호출한 실의수에 형식인수에서 받은 값을 *handler라는 포인터 함수에 저장 한후  printf("the result is %d.\n", (*handler) (num1, num2)); 문에서 그 값을 출력 시키는 것이다.

 

 7. 위 그림은 각각의 문자를 입력 시키고 어떻게 출력 되는지를 볼 수 있는 화면이다.

 

 

 

728x90
반응형

댓글