자동 변수와 정적 변수 비교하기
추천 자료: ASP.NET Core 인증 및 권한 부여
이 예제에서는 자동 변수와 정적 변수의 차이를 보여줍니다.
코드: memory_class_automatic_and_static_variables.c
#include <stdio.h>
// 전역 스코프에 정적 변수 i와 j를 선언하고 초기화합니다.
static int i = 10;
static int j = 20;
// sub 함수의 원형을 선언합니다. 이 함수는 정적 변수 i와 j의 값을 증가시키고 출력합니다.
void sub(void);
// sub 함수 정의: 전역 정적 변수 i와 j의 값을 증가시키고 출력합니다.
void sub(void)
{
++i;
++j;
printf("sub -> i = %d, j = %d\n", i, j);
}
// main 함수 정의: 자동 변수 i와 j를 선언하고 초기화한 후 sub 함수를 호출하고 결과를 출력합니다.
int main(void)
{
// main 함수 스코프에 자동 변수 i와 j를 선언하고 초기화합니다.
int i = 100;
int j = 100;
// sub 함수를 두 번 호출합니다. 전역 정적 변수 i와 j의 값이 각 호출에서 증가합니다.
sub();
sub();
// main 함수 스코프의 자동 변수 i와 j의 값을 출력합니다.
printf("main -> i = %d, j = %d\n", i, j);
// 프로그램이 정상적으로 종료되었음을 표시하기 위해 0을 반환합니다.
return 0;
}
출력 결과:
sub -> i = 11, j = 21
sub -> i = 12, j = 22
main -> i = 100, j = 100
이 예제에서, 정적 변수 i와 j는 전역 범위에서 선언되어서 sub 함수 호출 간에 값을 유지합니다. 반면에 main 함수의 스코프에서 선언된 자동 변수 i와 j는 각 함수 호출에 대해 독립적인 값을 가집니다. 출력 결과에서 알 수 있듯이, 정적 변수는 함수 호출이 끝나더라도 메모리에 남아 있어 값을 유지하며, 자동 변수는 함수 호출이 끝나면 사라집니다.
추천 자료: .NET Blazor에 대해 알아보시겠어요? .NET Blazor 알아보기를 확인해보세요!