강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

skaerjgh2님의 프로필 이미지
skaerjgh2

작성한 질문수

(2025) 일주일만에 합격하는 정보처리기사 실기

static 변수

첫 코딩 질문입니다.

해결된 질문

작성

·

25

0

#include<stdio.h>

voidinitialize() {

staticint initialized = 0;

if (!initialized) {

printf("초기화...\n");

initialized = 1;

} else {

printf("초기화 완료되었습니다.\n");

}

}

 

intmain() {

initialize();

initialize();

return0;

}

여기서

출력값:

초기화....

초기화 완료되었습니다.

이해가 안가는데 풀이 한번 부탁드립니다 ㅠ

 

밑에 예제도 한번 풀이 같이 해주시면 감사하겠습니다.

답변 2

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

안녕하세요, 아래 코드에 대해서 설명드립니다.

 

#include <stdio.h>

void initialize() {
    static int initialized = 0;
    if (!initialized) {
        printf("초기화...\n");
        initialized = 1;
    } else {
        printf("초기화 완료되었습니다.\n");
    }
}

int main() {
    initialize();
    initialize();
    return 0;
}

 

static 변수는 프로그램이 시작된 이후로 한 번만 초기화되는 변수입니다.

처음에는 초기화...\n 라는 것이 출력되고 이후에는 1로 바뀝니다. 그러면 계속 1로 값을 상주하여 가지고 있게 됩니다.

 

그래서 그 다음에는 !initialized이 되면 C언어는 조건문에 0이 아닌 어떤 숫자가 오든 참이 되고

앞에 있는 NOT(!)을 만나 거짓이 되므로 else로 들어갑니다.

 

그래서 "초기화 완료되었습니다.\n"를 출력합니다.

0

안녕하세요, 인프런 AI 인턴입니다. skaerjgh2님.

질문해주신 코드는 static 변수를 활용하여 한 번 초기화된 값을 유지하는 예제입니다. 각 부분을 설명드리겠습니다.

#include<stdio.h>

void initialize() {
    static int initialized = 0;

    if (!initialized) {
        printf("초기화...\n");
        initialized = 1;
    } else {
        printf("초기화 완료되었습니다.\n");
    }
}

int main() {
    initialize();
    initialize();
    return 0;
}

코드의 동작 원리:

  • initialize 함수가 호출될 때, static int initialized = 0; 구문은 함수가 처음으로 호출될 때 한 번만 실행됩니다. static 키워드는 변수의 생명 주기가 프로그램이 종료될 때까지 이어지게 하며, 변수가 다른 호출에서도 자신의 값을 유지하게 합니다.

  • 첫 번째 호출: 처음에 initialized는 0으로 설정되어 있고, !initialized 조건이 참(true)이기 때문에 "초기화...\n"이 출력됩니다. 그 후, initialized는 1로 설정됩니다.

  • 두 번째 호출: initialized가 이미 1로 설정되어 있으므로 !initialized 조건이 거짓(false)이 되고, 이때 "초기화 완료되었습니다.\n"이 출력됩니다.

간단히 말해, static 변수는 한 번만 초기화되어 그 이후로는 재할당하지 않는 변수입니다. 따라서 두 번째 이후 호출에서는 이미 초기화가 완료되었음을 출력하게 됩니다.

유사한 내용을 다루고 있는 기존의 답변을 추천드리니, 추가적으로 학습하시는데 도움이 될 거라 생각합니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

skaerjgh2님의 프로필 이미지
skaerjgh2

작성한 질문수

질문하기