본문 바로가기
C++/C++ 문법

C++ 정적 변수(static), 상수 변수(const)

by Sein_ 2025. 10. 13.
728x90

[Do it C++ 완전정복_ 131~138p]

정적 변수 (static)

  • 프로그램이 처음 실행될 때 한 번만 초기화된다. (명시적 초기화가 없으면 자동으로 0으로 초기화)
  • 프로그램 종료 시까지 메모리에 유지된다.
  • 함수가 여러 번 호출되어도 이전 값이 유지된다.
#include <iostream>
using namespace std;

void counter() {
    static int count = 0;  // 정적 변수
    count++;
    cout << "count = " << count << endl;
}

int main() {
    counter();
    counter();  // 이전 값이 유지되어 2까지 증가
}

 

정적 변수의 수명주기

  • 프로그램 시작 시, 정적 변수는 데이터(Data) 영역에 할당되어 한 번만 초기화된다.
  • 프로그램이 끝날 때 정적 변수의 메모리가 소멸된다.
  • https://slowbreeze.tistory.com/232

 

정적 변수 사용이유

공유되고 값이 유지되는 변수를 선언하고 싶지만, 특정 클래스나 함수 내부에서만 접근하고 싶을 때 사용한다.

예를 들어 어떤 클래스가 얼마나 많은 객체를 생성했는지 셀 때 유용하다.

 

 

상수 변수 (const)

  • 한 번 초기화되면 값을 변경할 수 없는 변수로 읽기 전용 데이터로 사용된다.
  • 반드시 선언과 동시에 초기화해야 한다.
const int MAX = 100;   // 상수

 

포인터 변수의 상수

  • 포인터와 const의 위치에 따라 상수화 되는 대상이 달라지니 주의!
선언 형태 의미 변경 가능 여부
const int* p 포인터가 가리키는 값이 상수 O (주소 변경 가능) / ✗ (값 변경 불가)
int* const p 포인터 자체가 상수 ✗ (주소 변경 불가) / O (값 변경 가능)
const int* const p 주소와 값 모두 상수 ✗ (둘 다 불가)
int a = 10, b = 20;
const int* p1 = &a;  // *p1 수정 불가, p1은 다른 주소 가능
int* const p2 = &a;  // *p2 수정 가능, p2는 다른 주소 불가