본 내용은 어소트락 무료 강의 <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;
}