[스택 stack)]
- 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역
- 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸
[힙(heap)]
- 사용자가 직접 관리할 수 있는, 직접 관리해야하는 메모리 영역
- 사용자에 의해 메모리 공간이 동적으로 할당되고 해제
[오버로딩 (Overloading)]
int sum (ina a, int b){return a+b;}
double sum (double a, double b){return a+b;}
=> 같은 이름을 가진 함수를 여러번 선언하여 어떤 타입의 인자가 들어오던 매칭할 수 있도록 하는 것
=> **공통 기능의 함수를 하나의 이름으로 묶어주는 것**
[가변인자]
- 포인터의 작용으로 이루어지는 것
- 인자 개수를 모르니 스택(stack)에 쌓았다가 하나씩 빼서 사용
- 결론적으로, 인자들을 배열에 저장해서 쓰는 것
- 최소 1개 이상의 고정인수가 있어야 하며 '...'은 파라미터 순서 상 가장 마지막에 위치
[예시]
#include <stdio.h>
#incldue <stdarg.h>
int sum(ins num_args, ...)
{
va_list ap;
va_start(ap, num_args);
int arg = 0, result = 0;
fot (int i=0; i<num_args; i++)
{
arg = va_arg(ap, int);
result += arg;
}
va_end(ap);
return result;
}
va_list
: 인자 리스트에서 추출하고 싶은 인자의 주소를 가리키는 포인터 역할(가변공간)
→ 함수가 아니라 데이터 타입
va_start
: va_list로 정의한 변수가 맨 첫 번째 가변인수를 받을 수 있도록 초기화 하는 함수
→ va_list로 선언된 인스턴스(ap) 와 고정인수를 인자로 받음
va_arg
: ap포인터가 위치한 부분의 데이터를 읽어 반환하는 함수
va_end
: va_list 타입을 널로 초기화하는 함수