윤성우의 열혈 c 프로그래밍 Chapter 9 C언어의 핵심! 함수!

09-1 함수의 정의와 선언

1. 다양한 형태의 함수 정의

  • 전달인자 O 반환값 O

    int Add(int num1, int num2)
    {
    int result = num1+num2;
    return result; / result 값을 Add 함수를 호출한 영역으로 전달 /
    }

    → 전달인자: int형 변수 num1, num2 / 반환값: result
  • 전달인자 O 반환값 X

    void ShowAddResult(int num)
    {
    printf("덧셈 결과 출력: %d \n", num);
    }

    void: 무효임을 선언하다. 비우다.
  • 전달인자 X 반환값 O

    int ReadNum(void)
    {
    int num;
    scanf("%d", &num);
    return num;
    }

  • 전달인자 X 반환값 X

    void HowToUseThisProg(void)
    {
    printf("두 개의 정수를 입력하시면 덧셈결과가 출력됩니다. \n");
    printf("자! 그럼 두 개의 정수를 입력하세요. \n");
    }

※ 반환형이 void로 선언된 함수에서도 return문을 삽입할 수 있다. ( return; )

2. 함수의 선언

일반적으로 함수는 호출되기 전에 미리 정의되어야 한다.
but 함수를 선언하면 정의하기 전에 호출 가능

int Increment(int); /함수의 선언/
int main(void)
{
int num=2;
num = Increment(num); /함수의 호출/
return 0;
}
int Increment(int n) /함수의 정의/
{
num++;
return n;
}

p. 221 09-1 문제 1

(풀이)

(해설)

→ 조건 연산자를 활용해 코드를 더 간결하게 짤 수 있다.

p. 221 09-1 문제 3

09-2 지역변수

지역변수: 중괄호 내에 선언되는 모든 변수로, 선언된 지역에 한해 유효하다.
→ 해당 지역을 벗어나면 자동으로 소멸
→ 함수 정의 시 사용되는 매개변수를 포함
→ 선언된 지역이 다르면 변수 이름이 같아도 문제되지 않음
→ 지역변수는 외부에 선언된 동일한 이름의 변수를 가림

int main()
{
int num =1;
if (num==1)
{
int num=7;
num+=10;
printf("if문 내 지역변수 num: %d ", num);
}
printf("main 함수 내 지역변수 num: %d", num);
return 0;
}

결과: if문 내 지역변수 num: 17 main 함수 내 지역변수 num: 1

09-3 전역변수, static 변수, register 변수

1. 전역변수

→ 프로그램 전체 영역 어디서든 접근이 가능함
→ 별도의 값으로 초기화하지 않으면 0으로 초기화됨
→ 변수 선언 시 어떠한 중괄호에도 포함되지 않음
→ 전역변수와 동일한 이름의 지역변수 선언 시, 해당 지역 내에서는 전역변수가 가려짐

※ 전역변수의 수가 증가할수록 프로그램은 복잡해지기 때문에, 전역변수의 선언은 신중해야 함

2. static 변수

→ 지역변수에 static 선언 시 전역변수의 성격을 지니게 됨
→ 선언된 함수 내에서만 접근 가능 (지역변수 특성)
→ 딱 1회 초기화되고 프로그램 종료 시까지 메모리에 존재 (전역변수 특성)
→ 초기화하지 않을 시 0으로 초기화 (전역변수 특성)

3. register 변수

→ 레지스터에 저장돼 접근이 빠름
→ register 선언을 추가해도 컴파일러의 판단에 따라 레지스터에 할당되지 않을 수도 있음
→ 전역변수는 register 선언 불가

p. 237 09-2 문제 1

09-4 재귀함수

재귀함수: 함수 내에서 자기 자신을 다시 호출하는 함수

  • 재귀함수를 이용해 팩토리얼 함수 만들기

좋은 웹페이지 즐겨찾기