정처기 감자정처기 감자
C언어메모리

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 static 변수 - 값이 유지되는 변수

코딩C언어
읽는데 6분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-03-21
조회수: —
선수학습(2개)
  • 변수 스코프 - 지역 변수와 전역 변수의 탐색 순서
  • 함수의 기초

요약

C언어 static 변수의 개념과 동작 방식을 알아봅니다. 함수 내 static 변수가 호출 간에 값을 유지하는 원리, 지역 변수와의 차이점을 정보처리기사 실기 기출문제와 함께 정리합니다.

Java의 static과 비교하고 싶다면?
C와 Java에서 static의 공통점과 차이점을 정리한 static 키워드 비교 페이지를 참고하세요.

static 변수 핵심 정리

아래에서 하나씩 배울 내용을 미리 정리한 표입니다.

개념설명예시
static 선언변수 앞에 static 키워드 추가static int x = 0;
한 번만 초기화프로그램 시작 시 한 번만 초기화됨두 번째 호출에서도 이전 값 유지
값 유지함수 종료 후에도 값이 사라지지 않음호출마다 2 → 4 → 6
저장 위치데이터(Data) 영역에 저장지역 변수(스택)와 다른 위치
기본값 0초기화하지 않아도 자동으로 0static int x; → x는 0
접근 범위선언된 함수 안에서만 접근 가능전역 변수와 달리 함수 밖 접근 불가

static 변수란?

자료형과 함수를 먼저 배우셨다면 이 페이지를 이해하는 데 어려움이 없을 것입니다.

static은 "정적인", "고정된"이라는 뜻입니다. static 변수는 메모리에 고정된 위치에 저장되어, 함수가 종료되어도 값이 사라지지 않고 유지되는 변수입니다.

용어의미
static (정적)고정된 위치에 유지됨
dynamic (동적)필요할 때 생성/소멸됨
c
코드 하이라이팅 중…
구분첫 번째 호출두 번째 호출세 번째 호출
static int x = 0246
int x = 0222
static 변수 vs 일반 변수 비교
static 변수는 값이 유지되어 2 → 4 → 6으로 누적되지만, 일반 변수는 매번 0에서 시작해서 항상 2입니다.

static 변수 vs 지역 변수

지역 변수 (매번 초기화)

c
코드 하이라이팅 중…

지역 변수는 함수가 호출될 때마다 새로 생성되고, 종료되면 소멸합니다. 초기화하지 않으면 쓰레기 값 1이 들어있을 수 있으므로 반드시 초기값을 지정해야 합니다.

static 변수 (값 유지)

c
코드 하이라이팅 중…

static 변수는 프로그램 시작 시 한 번만 초기화되고, 이후에는 이전 값이 유지됩니다.

static 변수와 지역 변수 비교
지역 변수는 매번 0에서 시작하지만, static 변수는 이전 값에서 이어집니다.

동작 원리

메모리 저장 위치

메모리 구조에서 스택(Stack)은 함수 호출 시 임시로 사용되는 공간이고, 데이터(Data) 영역은 프로그램 시작부터 끝까지 유지되는 공간입니다.

변수 종류저장 위치특징
지역 변수스택(Stack)함수 호출/종료 시 생성/소멸
static 변수데이터(Data) 영역프로그램 실행 동안 유지
전역 변수데이터(Data) 영역프로그램 실행 동안 유지

static 변수는 전역 변수처럼 데이터 영역에 저장되지만, 접근 범위는 함수 내부로 제한됩니다.

초기화 시점

c
코드 하이라이팅 중…

static int count = 0; 코드는 컴파일(코드를 실행 가능한 프로그램으로 변환하는 과정) 시점에 처리되어, 프로그램이 시작할 때 데이터 영역에 0으로 초기화됩니다. 프로그램을 실행하는 시점(런타임)에 함수가 호출될 때마다 이 초기화 코드가 실행되는 것이 아닙니다.

static 변수 초기화는 한 번만 실행됩니다
static int x = 0; 코드가 함수 안에 있어도, 함수가 여러 번 호출될 때 이 초기화가 반복되지 않습니다. 프로그램 시작 시 한 번만 초기화됩니다.

static 변수 vs 전역 변수

둘 다 프로그램 실행 동안 값이 유지되지만, 접근 범위가 다릅니다.

c
코드 하이라이팅 중…
구분전역 변수static 변수
값 유지OO
어디서든 접근OX (선언된 함수 내부만)
이름 충돌 위험있음없음
static 변수와 전역 변수를 혼동하지 마세요
둘 다 값이 유지되지만, static 변수는 선언된 함수 안에서만 사용할 수 있습니다. 시험에서 static 변수를 다른 함수에서 접근할 수 있는지 묻는 문제가 출제됩니다.

실행 흐름 추적

24년 3회 기출문제를 예시로 실행 흐름을 추적해보겠습니다.

c
코드 하이라이팅 중…

변수 구분

  • main의 x: 지역 변수, 루프마다 1씩 증가합니다. sum 계산에 사용되지 않으므로 출력 결과에 영향을 주지 않습니다.
  • increase의 x: static 변수, 호출마다 2씩 증가하며 값 유지

반복별 실행

반복increase 호출 전 static xincrease 실행 후 static xsum
i=0020 + 2 = 2
i=1242 + 4 = 6
i=2466 + 6 = 12
i=36812 + 8 = 20

출력: 20


정보처리기사 실기 대비 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

  1. 이전에 메모리에 남아 있던 알 수 없는 값입니다. 예를 들어 32767, -858993460 등 예측할 수 없는 숫자가 들어있을 수 있습니다. ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 연결 리스트 (Linked List)
C언어코딩C언어
2026-05-06-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999