함수
함수란?
임의의 값을 넣으면 어떠한 결과가 나타나는 코드
수학으로 비유하면 f(x)=2x+4 처럼 x에 어떤 값을 넣으면 결과 f(x)가 나오는 식이다.
생산기계로 비유하면 기계를 작동시킬 경우 설계된 그대로 작동하여 물건이 나오는 기계를 함수라한다.
이와 마찬가지로 함수를 호출하거나 임의의 값(매개변수)과 함께 함수를 호출하면 그에 상응하는 결과값이 출력된다.
예)
함수의 동작과정
1) 코드상에서 함수를 호출한다.
2) 함수안에 코드가 작동한다.
3) 결과 값을 반환한다.
ex)
int main(int argc, char** argv)
{
……………
return 0;
}
함수 : main
매개변수 : int argc, char** argv
결과값 : 0
int sum(int num1, int num2)
{
return num1+num2;
}
함수 : sum
매개변수 : int num1, int num2
결과값 : num1+num2(두 변수의 합)
함수의 종류
1) http://goo.gl/HuQesq
2)ansi_c.pdf
함수 선언 방법
C언어의 컴파일러는 읽어 들일때 한줄 한줄 읽어들인다.
A라는 함수를 호출하려면 호출하려는 함수의 변수 타입과 갯수가 일치하여야 한다.
반환타입 함수이름(변수1, 변수2, ....)
{
처리할 내용...
return 반환할 것(반환타입이 void면 필요없다.)
}
1) sum함수 밑에 main 함수가 존재한다.
int sum(int num1, int num2)
{
return num1+num2;
}
int main(int argc, char** argv)
{
int sumnumber;
sumnumber = sum(12, 20); //인자에 12와 20을 넣었다.
return 0;
}
2) sum함수가 존재한다는것을 미리 알려준다. <함수 선언>
int sum(int num1, int num2);
int main(int argc, char** argv)
{
int a = 12;
int b = 20;
float c = 1.2f;
int sumnumber;
sumnumber = sum(a, b);//반환된 값이 sumnumber 에 대입된다.
//sumnumber = sum(12); (x) 갯수가 맞지 않다.
//sumnumber = sum(a, c); (x) 타입이 맞지 않다.
return 0;
}
int sum(int num1, int num2)
{
return num1+num2;
}
프로그램이 커지다 보면 함수가 무수히 많아진다. 그럴때 함수들을 일일히 위치를 조절하기 힘들기 때문에 함수 선언을 해두면 위치를 일일히 할 필요가 없어진다.
매개변수(parameter)? 인자(argument)?
매개변수와 인자는 겉으로 보기에는 비슷하다. 사실 용도가 다르기 때문에 이름이 다르게 붙어있다.
함수를 호출할때 넣는 값들을 인자, 함수를 만들때 정의하는것들을 매개변수라 한다.
위에 sum(12, 20)에서 12와 20은 인자라 불리며 sum(unt num1, int num2)는 매개변수라 불린다.
그리고 값을 받는게 아닌 복사하는 구조이기 때문에 원래 값이 변경되지 않는다.
#include <stdio.h>
void plusplus(int a, int b)
{
a = a+1;
b = b+1;
}
int main(int argc, char** argv)
{
int a = 10;
int b = 20;
plusplus(a, b);
printf("a = %d, b = %d\n", a, b);
plusplus(a, b);
printf("a = %d, b = %d\n", a, b);
plusplus(a, b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
연습문제
1) 더한 결과가 출력되는 함수를 작성하여 출력하시오.
2) 곱한 결과가 출력되는 함수를 작성하여 출력하시오.
3) 변수 값이 변경되지 않는데 변경하는 방법이 무엇이 있을지 상상해보자.