C++ (5) - 함수
본 내용은 어소트락 무료 강의 <C/C++ 무료강의>을 기반으로 공부한 내용을 정리한 것이다. 틀린 내용이 있을 수도 있음.
함수 (1) - 함수의 정의와 예제
지역 변수와 전역 변수를 나누는 기준이 되는 함수는 Function, 말 그대로 기능을 가진 것으로 이해한다.
함수 예제
// 두 정수의 합을 구하는 함수
int Add(int a, int b)
{
return a + b;
}
main 함수
main 함수는 말그대로 메인이되는 함수이다. 이 함수가 호출이되어야 프로그램이 시작되는 것이 기본 원리이다.
예제 코드를 main 함수에서 적용 및 호출
int main()
{
iData = Add(10 + 10)
return 0;
}
입출력 함수
앞전에 배운 printf와 scanf또한 함수의 종류이다.
입출력 함수
#include <stdio.h> // 전처리기로 header 파일 불러와야함.
printf("/출력하고 싶은 문자" \n)
sacnf_s("출력하고 싶은 문자" \n)
함수 (2) - 함수의 작동 원리 & 자료구조
프로그램이 실행될 때의 최초의 함수 = main 함수
main 함수에서 코드 순차적으로 다른 함수를 만날때 마다 그 함수를 호출해 불러오고 리턴값을 받은 후에 해당 함수 호출을 중지하고 이를 반복한다.
반복과정에서 호출된 함수가 쌓이고 없어지고를 반복하는 형태를 띔 (자료구조의 “스택 개념과 유사”)
맨밑의 스택을 “main 함수”로 본다.
자료구조
Data Structure.
어떤 형식으로 데이터를 관리할 것이고, 어떻게 효율적으로 할 것인가를 다룬다.
자료 관리 방법 (1) - “스택(Stack)”
함수의 작동 원리를 생각한다. -> 선 입 후 출(후 입 선 출)
자료관리 방법 중 하나이다.
자료 관리 방법 (2) - “큐(Queue)”
스택과 정반대 개념이라고 생각한다. -> 선 입 선 출(후 입 후 출)
메모리 공간
함수가 사용하는 메모리 공간을 “스택 메모리 영역” 이라고 한다. 예제 코드로 설명
int Add(int a, int b)
{
return a + b;
}
int main() // 1. main 함수 호출 -> 프로그램 시작
{
iData = Add(10 + 10) // 2. 외부에서 만든 Add 함수를 통해 iData 변수에 20이라는 값 저장
// 3. 변수값 저장 후 main 함수위에 Add함수를 통해 1스택이 쌓였다.
return 0; // 4. 원래 모습으로 돌아가기 위해 얹혀진 스택을 제거하는 return값 저장
} // (5.Add 이외의 함수가 존재한다면 존재하는 수 만큼 위 과정 반복)
// 6. main 함수 종료 -> 프로그램 종료
메모리와 코드영역은 같은말이 아니다. 메모리는 명령어에 맞춰 동작하는 영역이고 코드영역은 명령어의 집합영역이다.
함수 (3) - 반복문을 이용해 Factorial(!) 함수 만들기
n Factorial = n! = 1 x 2 x 3 x … x n -> n은 자연수
// 7! 구현하는 함수 만들기
int main()
{
int i = 7; // i값 = n = 7
int iValue = 1; // 모든 팩토리얼의 첫 곱은 1 고정.
for (int j = 0; j < i - 1; ++j) // 첫번쨰 곱은 1 고정이므로 n!의 곱 횟수 = n - 1회
{
iValue *= (j + 2); // 첫번째 수 제외하고 다음 곱에서 n-2번째 숫자와
// 곱을 진행 -> 2 * 3 => 6 * 4 => 24 * 5 => .. => (n - 1)! * (n + 2)
}
return 0;
}
i 값을 변경만 해주면 코드를 일일이 다시 작성하지 않아도 됨. “코드의 재활용”
함수의 장점 : 코드의 재활용
int Factorial(int _iCount) // int _iCount : 구하고자 하는 수 (n)
{
int iValue = 1; // 함수로 받기 때문에 i 값을 정의 X
for (int j = 0; j < _iCount - 1; ++j) // i -> int _iCount로 받기때문에
{
iValue *= (j + 2);
}
return iValue; // 리턴 시 팩토리얼 결과 값을 받는다.
}
int main() // 앞에서 구현한 팩토리얼 함수를 main 함수에서 호출
{
int iValue = Factorial(4); // 4!
int iValue = Factorial(10); // 10!
return 0;
}