자동 변수와 정적 변수 비교하기

  • 2 minutes to read

이 예제에서는 자동 변수와 정적 변수의 차이를 보여줍니다.

코드: 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는 각 함수 호출에 대해 독립적인 값을 가집니다. 출력 결과에서 알 수 있듯이, 정적 변수는 함수 호출이 끝나더라도 메모리에 남아 있어 값을 유지하며, 자동 변수는 함수 호출이 끝나면 사라집니다.

더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com