C 언어 기초

int f(void) {
    static int s = 0;
    int a = 0;
    s++;
    a++;
    return s * 10 + a;
}

위의 함수 f를 3번 연속으로 호출했을 때, 세 번째 반환값으로 올바른 것은?

  1. A11
  2. B13
  3. C31
정답과 해설 보기

정답: C. 31

static을 붙인 지역 변수 s는 프로그램 시작 전에 한 번만 0으로 초기화되며, 함수에서 돌아와도 값이 남습니다. 따라서 s는 호출할 때마다 1, 2, 3으로 증가합니다. static이 없는 a는 호출할 때마다 새로 만들어져 0부터 시작하므로 매번 1입니다. 세 번째 반환값은 3 × 10 + 1 = 31입니다.

이 분야 연습하기 분야로 돌아가기

C 언어 기초의 다른 문제

  1. C 언어에서 (1) 함수 안에서 static을 붙이지 않고 선언한 지역 변수, (2) malloc으로 확보한 영역, (3) 함수 밖에서 선언한 변수가 각각 존재하는 기간(수명)의 조합으로 올바른 것은?
  2. int는 32비트(최댓값 2147483647)로 한다. 위의 함수 fact(n)이 n의 계승을 오버플로 없이 올바르게 반환하는 최대의 n은?
  3. int는 4바이트, 포인터는 8바이트로 한다. int형에 대한 포인터 p의 값(주소)이 0x1000일 때, p + 3의 값은?
  4. int는 4바이트, 포인터는 8바이트로 한다. 위의 프로그램을 실행했을 때의 출력으로 올바른 것은?
  5. int는 4바이트로 한다. 위의 코드를 실행했을 때의 출력으로 올바른 것은?