인프런 커뮤니티 질문&답변
첫 코딩 질문입니다.
해결된 질문
작성
·
25
0
답변 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 변수는 한 번만 초기화되어 그 이후로는 재할당하지 않는 변수입니다. 따라서 두 번째 이후 호출에서는 이미 초기화가 완료되었음을 출력하게 됩니다.
유사한 내용을 다루고 있는 기존의 답변을 추천드리니, 추가적으로 학습하시는데 도움이 될 거라 생각합니다:
- Static 변수 질문: 언제 초기화되는가?:
static변수가 초기화되는 시점과 그 사용에 대해 더 자세히 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





