- 함수(function)
하나의 특정 작업을 수행하도록 독립적으로 설계된 프로그램 코드의 한 단위
strarbar() 가 어떤 유형의 함수인지 컴파일러에게 알려 주는 함수 프로토타입(function prototype)
그 함수를 실행되게 만드는 함수 호출(function call)
그 함수가 무엇을 하는 것인지 정확하게 서술하고 있는 함수 정의(function definition)
프로그램은 starbar() 의 함수 프로토타입을 main()앞에 놓는다.
void show_n_char(char ch, int num)
두 변수 ch 와 num 을 '형식전달인자(formal argument)' 또는 '형식매개변수(formal parameter)'라고 부른다.
- 실전달인자(actual argument)
실전달인자는 함수 호출에서 괄호 안에 나타나는 값
- 형식매개변수(formal paramental)
형색매개변수는 함수 정의에서 함수 머리에 선언되는 변수
show_n_char(SPACE, 12);
여기서 실전달인자 SPACE, 12가 형색매개변수 ch, num에 대입된다.
- 함수로부터 값 리턴하기 return
return은 뒤에 오는 표현식의 값을 함수의 리턴값으로 만든다
리턴값은 변수에 대입할 수도 있고, 표현식의 일부로 사용할 수도 있다.
- 함수의 데이터형
리턴값이 없는 함수는 void형으로 선언해야한다.
함수에 데이터형을 선언하지 않으면, 구형 c 컴파일러들은 그 함수를 int형이라고 가정한다.
double klink(in a, int b)
두 개의 int형 전달인자를 사용하고 하나의 double형 값을 리턴하는 함수를 정의하고 있다는 것을 의미한다.
- ANSI C 함수 프로토타입
함수를 선언할 때 함수의 리턴형만 선언하고 전달인자는 선언하지 않는 결점이 있었다.
전달인자의 개수나 데이터형을 알려 주지 않아서 틀리게 사용하더라도, 컴파일러가 에러를 검출하지 못한다.
->함수 선언에서 변수들의 데이터형까지 선언하도록 허용
전달인자가 없는 경우
void print_name(void);
print_name()은 전달인자를 사용하지 않는다는 의미
함수의 리턴형
그 함수가 리턴하는 값의 데이터형을 나타낸다.
리터값이 선언된 리턴형과 다를 경우, 그 값이 선언된 리턴형으로 캐스트된다.
함수의 스그너처
함수의 리턴형과 함수의 매개변수 리스트는 함수 시그너처를 형성한다.
함수에 사용되는 값의 형(type)과 함수가 출력하는 값의 형을 지정한다.
- 재귀(recursion)
재귀의 제 1수준
up_and_down() 함수를 호출
제 2수준
자기 자신을 호출
:
제2수준은 제3수준을 호출
제3수준은 제 4수준을 호출
- 함수 호출의 각 수준으 자신만의 변수를 가진다.
- 각각의 함수 호출은 return 문에 의해 하나씩 청산된다.
- 재귀 함수에서 재귀 호출보다 앞에 있는 문장들은 그 함수들이 호출되는 순서로 실행된다.
- 재귀 함수에서 재귀 호출보다 뒤에 있는 문장들은 그 함수들이 호출되는 순서와 반대의 순서로 실행된다.
- 재귀의 각 수준이 자신만의 변수를 가질지라도, 코드 자체는 중복되지 않는다.
- 재귀 함수는 재귀 호출의 시퀀스를 중단시킬 수 있는 무언가를 가지고 있어야한다.
꼬리 재귀(tail recursion)또는 후미 재귀(end recursion)
재귀 호출이 함수의 끝return문 바로 앞에 있는 것
- 재귀의 장점
일부 프로그래밍 문제를 푸는데 재귀가 가장 간단한 해결책을 제공한다
- 재귀의 단점
일부 재귀 알고리즘이 컴퓨터의 메모리 자원을 매우 빠르게 고갈시킨다
피보나치 수열
return Fibonacci(n-1) + Fibonacci(n-2)
좋은점
간단한 정의를 제공
나쁜점
이중 재귀(double recursion)
제 1 수준으로 n이라는 변수를 하나 할당하고 제 2수준으로 n이라는 변수를 두 개 생성한다.
지수적 증가는 컴퓨터가 엄청난 메모리 크기를 요구하게 되어, 프로그램이 먹통이 된다.
- 주소 연산자(&)
변수 이름 앞에 사용했을 때, 변수의 주소를 제공한다.
포인터는 주소를 저장하는 데 사용되는 변수이다.
- 간접 연산자(*)
포인터 이름이나 주소 앞에 사용했을 때, 그것이 가리키는 주소에 저장되어 있는 값을 제공한다.
호출 함수에 있는 변수 바꾸기
최초의 값 x 와 y 값을 보관해 두기 위한 temp에 저장을 하는 과정이 필요하다
temp=x;
x=y;
y=temp;
- 포인터 선언
데이터형 키워드는 포인터가 가리키는 변수의 데이터형을 나타낸다.
애스터리스크(*)는 그 변수가 포인터라는 것을 나타낸다.
int *pi; 라는 선언은 pi가 포인터고 *pi는 int 형임을 나타낸다.
'primer plus' 카테고리의 다른 글
[c primer plus] chapter10 배열과 포인터 (0) | 2023.01.06 |
---|---|
[c primer plus] chapter08 문자 입출력과 입력 유효성 검사 (0) | 2023.01.05 |
[c primer plus] chapter07 C의 제어문: 분기와 점프 (0) | 2023.01.03 |
[c primer plus] chapter05 연산자, 표현식, 문장 (0) | 2023.01.02 |
[c primer plus] chapter04 문자열과 입출력 포맷 (0) | 2023.01.02 |