저장 형식 과 static 키워드 역할 소결

저장 형식 과 static 키워드 역할
C 의 저장 유형 은 두 가지 로 나 뉘 는데 하 나 는 정적 (static) 이 고 다른 하 나 는 자동 (automatic) 이다.주의 코드 는 저장 형식의 문제 가 존재 하지 않 습 니 다. 정적 메모리 에 항상 존재 합 니 다.여기 서 말 하 는 저장 유형 은 모두 변 수 를 대상 으로 하 는 것 이다.
정적 기억 장치
실행 가능 한 프로그램 파일 에 대응 하 는 부분 에 기대 치 를 두 고 이 파일 을 메모리 에 불 러 옵 니 다.프로그램 이 실 행 될 때, 이 대응 하 는 영역 에는 이미 기대 하 는 값 이 저장 되 어 있다.
동적 기억 장치
코드 블록 이 실 행 될 때 변 수 를 만 들 고 끝 난 후에 소각 합 니 다.저장 소 위 치 는 런 타임 스 택 에 있 습 니 다.
static 키워드
서로 다른 환경 에서 서로 다른 의 미 를 가진다.
  • 코드 블록 밖의 함수 정의 나 변수 성명 에 사용 할 때 static 는 링크 속성 을 external 에서 Internal
  • 로 변경 합 니 다.
  • 코드 블록 에 있 는 변수 성명 에 사용 할 때 static 는 이 변수의 저장 형식 을 automatic 에서 static 로 변경 합 니 다.
  • 그러나 작용 역 은 변 하지 않 았 다
  • 이러한 성명 의 부분 변 수 는 프로그램 에 영원히 존재 합 니 다. 코드 블록 호출 이 완료 되 었 을 때 없 애 는 것 이 아니 라 한 번 만 초기 화 됩 니 다.


  • 두 번 째 점 에 대해 서 코드 를 보 여 드 리 겠 습 니 다.
    #include <stdio.h>
    #include <stdlib.h>
    
    void foo()
    {
        static int num = 0;
        printf("%d
    "
    , num); num++; } int main() { for (int i = 0; i < 5; i++) { foo(); } return EXIT_SUCCESS; }

    결 과 는 '1, 2, 3, 45' 로 출력 됩 니 다. 즉, 이 변 수 는 num 이 재 활용 되 어 여러 번 초기 화 되 거나 여러 번 소각 되 지 않 았 습 니 다.foo 실행 이 완료 되 었 을 때 이 변 수 는 여전히 존재 하 며 마지막 실행 후의 효 과 를 유지 합 니 다.static 키 워드 를 삭제 하면 결 과 는 0 5 개 를 출력 합 니 다. 이때 num 도 일반적인 부분 변수 가 되 고 저장 위치 도 스 택 으로 바 뀌 며 변 수 는 foo 의 여러 번 호출 과 끝 에 따라 여러 번 초기 화 되 고 소각 합 니 다.

    좋은 웹페이지 즐겨찾기