logo

C의 정적 변수

정적 변수는 범위를 벗어난 후에도 값을 유지하는 속성을 가지고 있습니다! 따라서 정적 변수는 이전 범위에서 이전 값을 유지하고 새 범위에서 다시 초기화되지 않습니다.

통사론:



  static   data_type   var_name   = var_value;>

다음은 C의 정적 변수에 대한 몇 가지 흥미로운 사실입니다.

하둡 튜토리얼

1) 프로그램이 실행되는 동안 정적 int 변수는 메모리에 남아 있습니다. 일반 변수나 자동 변수는 해당 변수가 선언된 함수 호출이 끝나면 소멸됩니다.
예를 들어 static int를 사용하여 함수가 호출된 횟수를 계산할 수 있지만 자동 변수는 이 목적으로 사용할 수 없습니다.








// C Program to illustrate the static variable lifetime> #include> // function with static variable> int> fun()> {> >static> int> count = 0;> >count++;> >return> count;> }> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

>

>

산출

1 2>

위 프로그램은 정적 변수가 한 번만 초기화되고 프로그램이 끝날 때까지 유지되기 때문에 1 2 를 인쇄합니다. 이것이 바로 여러 함수 호출 간에도 값을 유지할 수 있는 이유입니다.

지역 자동 변수에 대해 동일한 코드를 시도해 보겠습니다.

문자열 함수 자바




// C Program to illustrate local auto variable in comparison> // of static variable.> #include> // Function> int> fun()> {> >int> count = 0;> >count++;> >return> count;> }> // Driver Code> int> main()> {> >printf>(>'%d '>, fun());> >printf>(>'%d '>, fun());> >return> 0;> }>

>

>

산출

1 1>

2) 정적 변수는 스택 세그먼트가 아닌 데이터 세그먼트에 메모리가 할당됩니다. 참조 C 프로그램의 메모리 레이아웃 자세한 내용은.

삼) 전역 변수와 같은 정적 변수는 명시적으로 초기화되지 않으면 0으로 초기화됩니다. 예를 들어 아래 프로그램에서 x 값은 0으로 인쇄되는 반면 y 값은 쓰레기입니다. 보다 이것 상세 사항은.

dbms의 데이터베이스 디자인




// C program to illustrate the default value of static> // variables> #include> int> main()> {> >static> int> x;> >int> y;> >printf>(>'%d %d'>, x, y);> }>

>

자바 프로그래밍 언어 튜토리얼
>

산출

0  [some_garbage_value]>

4) C에서 정적 변수는 상수 리터럴을 통해서만 초기화할 수 있습니다. 예를 들어, 다음 프로그램은 컴파일에 실패합니다. 보다 이것 상세 사항은.




다이애나 안쿠디노바

#include> int> initializer(>void>)> {> >return> 50;> }> > int> main()> {> >static> int> i = initializer();> >printf>(>' value of i = %d'>, i);> >getchar>();> >return> 0;> }>

>

>

산출

In function 'main': 9:5: error: initializer element is not constant  static int i = initializer();  ^>

메모: 이 조건은 C++에서는 유지되지 않습니다. 따라서 프로그램을 C++ 프로그램으로 저장하면 정상적으로 컴파일되고 실행됩니다.

5) C/C++에서는 정적 전역 변수 및 함수도 가능합니다. 이들의 목적은 변수나 함수의 범위를 파일로 제한하는 것입니다. 참고하세요 C의 정적 함수 상세 사항은.

6) 정적 변수는 구조체 내부에서 선언하면 안 됩니다. 그 이유는 C 컴파일러가 전체 구조 요소를 함께 배치해야 하기 때문입니다. 즉, 구조 멤버에 대한 메모리 할당은 연속되어야 합니다. 함수 내에서 구조를 선언하거나(스택 세그먼트) 메모리를 동적으로 할당(힙 세그먼트)하거나 전역(BSS 또는 데이터 세그먼트)할 수도 있습니다. 어떤 경우이든 모든 구조 멤버는 동일한 메모리 세그먼트에 상주해야 합니다. 구조 요소의 값은 구조의 시작 주소에서 요소의 오프셋을 계산하여 가져오기 때문입니다. 하나의 멤버만 데이터 세그먼트로 분리하면 구조의 목적이 무너지고 전체 구조를 정적으로 가질 수 있습니다.

관련 기사:

  • C++의 정적 키워드
  • 정적 키워드에 대한 퀴즈
  • C++의 정적 데이터 멤버
  • 정적 객체는 언제 파괴되나요?
  • 정적 멤버 함수에 대한 흥미로운 사실
  • 정적 함수가 가상일 수 있나요?
  • C++와 Java의 정적 키워드 비교
  • C의 정적 함수