C 언어 총 정리 8 - 함수 기초
함수
함수란 필요한 입력을 받아 원하는 어떤 기능을 수행한 후 결과를 반환(return)하는 프로그램이다.
함수는 라이브러리 함수(library function)와 사용자 정의 함수(user defined function)으로 구분 된다.
C프로그램에서 사용자가 직접 개발한 함수를 사용하기 위해서는 함수선언, 함수호출, 함수 정의가 필요하다.
함수정의
함수정의는 함수머리와 함수 몸체로 구성된다.
int add(int a, int b) // 반환형 함수이름(매개변수 목록) //함수머리
{ //함수몸체
int sum = a + b;
return (sum);
}
함수몸체에서는 함수가 수행해야 할 문장들로 구성된다.
return과 반환형
void (int a, int b) // 반환형 함수이름(매개변수 목록) //함수머리
{ //함수몸체
int sum = a + b;
return //생략가능!
}
함수가 반환값이 없다면 반환형으로 void를 기술한다.
return 문장은 함수에서 반환값을 전달하는 목적과 함께 함수의 작업 종료를 알리는 문장이다.
함수선언과 함수호출
정의된 함수를 실행하려면 프로그램 실행 중에 함수호출(function call)이 필요하다.
함수원형은 함수를 선언하는 문장
함수원형 구문
int sum1(int x, int y);
int sum2(int, int);
//반환형 함수이름(매개변수 목록);
함수원형은 함수선언으로 변수선언과 같이 함수를 호출하기 전에 반드시 선언되어야 한다.
함수원형 구문과 위치
#include <stdio.h>
int sum1(int a, int b); //함수 선언 부분
int main(void)
{
int a = 3, b = 5;
int ace = sum1(a, b); // sum1(a,b) 는 함수 호출 부분
return 0;
}
int sum1(int a, int b); //함수 정의 부분
{
int ace = a + b;
return (ace);
}
매개변수
형식매개변수(formal parameters) : 함수정의에서 기술되는 매개변수 목록의 변수
실매개변수(real parameters) : 함수를 호출할 때 기술되는 변수 또는 값 (실인자, 인자라고도 불린다.)
형식매개변수는 함수내부에서만 사용할 수 있는 변수
값에 의한 호출(call by value)의 함수에서 일반 매개변수의 값을 수정하더라도 함수를 호출한 곳에서의 실매개변수의 값은 변화되지 않는 특징이 있다.
다차원 배열을 인자로 이용하는 경우, 함수원형과 함수저의의 헤더에서 첫 번째 대괄호 내부의 크기를 제외한 다른 모든 크기는 반드시 기술되어야 한다.
double sum(double data[][3], int, int); //이차원 배열값을 모두 더하는 함수원형
이차원 배열의 행의 수는 ( sizeof(x) / sizeof(x[0]) ) 으로 계산 할 수 있다.
이차원 배열의 열의 수는 ( sizeof(x[0]) / sizeof(x[0][0]) )으로 계산 할 수 있다.
여기서 sizeof(x)는 배열 전체의 바이트 수를 나타내며 sizeof(x[0])는 1행의 바이트 수, sizeof(x[0][0])은 첫 번째 원소의 바이트 수를 나타낸다.
재귀 함수
재귀함수란 함수구현에서 자신 함수를 호출하는 함수
재귀방법으로 구현한 함수는 대부분 반복구문으로 구현이 가능하다.
재귀함수는 함수의 호출이 계속되면 시간도 오래 걸리고 메모리의 사용도 많다는 단점이 있다.
난수 라이브러리 함수
특정한 나열 순서나 규칙을 가지지 않는 연속적인 임의의 수를 난수(random number)라 한다.
난수를 생성하는 함수 rand()
함수 rand()의 함수원형은 헤더파일 stdlib.h에 정의 되어 있다.
함수 rand()는 0에서 32767사이의 정수 중에서 임의로 하나의 정수를 반환한다.
1에서 n까지의 난수를 발생시키려면 함수 rand()를 이용하여 수식 rand() % n + 1을 이용한다.
math.h 수학 관련 작업 , string.h 문자열 작업 , time.h 시간 작업 , ctype.h 문자 관련 작업 , stdlib.h 여러 유틸리티 함수 등의 여러 라이브러리를 위한 헤더 파일이 있다.