핌이의 일상

Programming/C

[C] 지역 변수, 정적 변수 설명

핌이 (Pimgrim) 2023. 12. 22. 21:43
#include <stdio.h>

int main()
{
    int a = 1;          // (1) 지역 변수 a를 1로 초기화
    static int b = 2;   // (2) 정적 변수 b를 2로 초기화
    {
        int a = 3;      // (3) 새로운 지역 범위에서 지역 변수 a를 3으로 초기화
        b = a + 4;      // (4) 외부 범위에서 선언된 정적 변수 b의 값을 변경 (b = 3 + 4)
        printf("%d %d\n", a, b);   // (5) 현재 범위의 a와 변경된 b를 출력 (3 7)
    }
    printf("%d %d\n", a, b);       // (6) 외부 범위의 a와 변경된 b를 출력 (1 7)
    return 0;
}

 

결과:

3 7
1 7

 


지역 변수와 정적 변수는 프로그램에서 사용되는 변수의 특성에 따라 차이가 있습니다.

1. **지역 변수 (Local Variables):**
   - 선언된 블록 내에서만 유효한 변수입니다. 함수 내의 중괄호({})로 둘러싸인 부분이나, 루프 내에서 선언된 변수가 일반적인 예입니다.
   - 지역 변수는 선언된 블록에서만 접근 가능하며, 블록을 벗어나면 소멸됩니다.
   - 각 함수 호출마다 새로운 인스턴스가 생성되어 독립적으로 동작합니다.

2. **정적 변수 (Static Variables):**
   - 프로그램이 실행되는 동안 메모리에 유지되는 변수입니다.
   - 정적 변수는 `static` 키워드로 선언되며, 함수 내에서 또는 함수 외부에서 사용될 수 있습니다.
   - 함수 내부에서 정적 변수를 선언하면 해당 변수는 함수가 종료되더라도 값이 유지됩니다.
   - 함수 외부에서 선언된 정적 변수는 파일 스코프를 가지며, 파일 내에서 전역적으로 사용됩니다.

간단한 예시로 설명하면:

 

#include <stdio.h>

void exampleFunction() {
    int localVar = 0;       // 지역 변수
    static int staticVar = 0; // 정적 변수
    localVar++;
    staticVar++;
    printf("Local Variable: %d, Static Variable: %d\n", localVar, staticVar);
}

int main() {
    exampleFunction();  // 출력: Local Variable: 1, Static Variable: 1
    exampleFunction();  // 출력: Local Variable: 1, Static Variable: 2
    return 0;
}


여기서 `localVar`는 함수 호출 간에 초기화가 되어 누적되지 않지만, `staticVar`는 누적되어 계속 값을 유지합니다.

반응형

'Programming > C' 카테고리의 다른 글

C | into(), take()  (0) 2024.03.12
Bubble Sort  (0) 2024.03.12
[C] 배열과 포인터  (1) 2023.12.23
printf에 값이 여러 개일 경우엔 “큰 따옴표”를 쓰기  (1) 2023.12.22
명령 프롬프트에서 c 파일 실행하는 방법  (1) 2023.12.22