C ++의 스토리지 클래스와 그 유형은 무엇입니까?



이 스토리지 클래스 블로그에서는 auto, register, static, extern 및 mutable과 같이 C ++에서 사용되는 다양한 스토리지 클래스를 예제로 살펴볼 것입니다.

스토리지 클래스 C ++ 변수 / 함수의 수명과 가시성을 정의합니다. 수명은 변수가 활성 상태로 유지되는 기간이며 가시성은 프로그램의 다른 모듈에서 변수에 대한 접근성입니다. 이 프로그램 실행 중에 특정 변수의 존재를 추적하는 데 도움이됩니다. 이 스토리지 클래스 블로그에서는 C ++에서 사용되는 다양한 스토리지 클래스를 살펴 보겠습니다.

의 시작하자.





C ++의 스토리지 클래스는 무엇입니까?

C ++의 모든 변수에는 데이터 유형과 스토리지 클래스가 있습니다. 데이터 유형은 int, float, char 등과 같은 변수에 저장할 수있는 데이터 유형을 지정합니다. 저장소 클래스는 변수의 두 가지 다른 속성 인 수명과 범위를 제어합니다.

모든 변수에 데이터 유형이있는 것을 보았을 것입니다. 그러나 지금까지 변수에 연결된 스토리지 클래스를 보지 못했을 것입니다. 실제로 스토리지 클래스를 정의하지 않으면 컴파일러가 자동으로 기본 스토리지 클래스를 할당합니다. 변수의 저장소 클래스는 메모리에서 변수의 저장 위치, 기본 초기 값, 변수 범위 및 수명에 대한 정보를 제공합니다.



스토리지 클래스 유형

C ++ 프로그램에는 5 개의 스토리지 클래스가 있습니다.

  • 자동
  • 레지스터
  • 공전
  • 외부
  • 변하기 쉬운

각 스토리지 클래스에 대해 자세히 설명하겠습니다.

자동 스토리지 클래스

자동 (자동) 스토리지 클래스는 함수 또는 블록 내에서 선언되는 모든 지역 변수의 기본 스토리지 클래스입니다. auto 키워드는 작성하는 동안 거의 사용되지 않습니다. C ++ 프로그램 .



자동 변수의 범위는 선언 된 함수 또는 블록 내에 있으며 해당 함수 또는 블록 외부에서 액세스 할 수 없습니다. auto 변수가 선언 된 상위 블록 / 함수 내의 중첩 된 블록 내에서도 액세스 할 수 있습니다.

포인터 변수를 사용하여 범위 밖의 자동 변수에 액세스 할 수 있습니다. 변수가있는 동일한 메모리 위치를 가리켜 야합니다.

수명은 함수의 수명과 동일합니다. 함수 실행이 완료되면 변수가 삭제됩니다.

기본적으로 가비지 값은 선언 중에 할당됩니다.

통사론:

데이터 유형 var_name1 [= value]

또는

자동 데이터 유형 var_name1 [= value]

위의 예에서 두 개의 변수는 동일한 스토리지 클래스로 정의됩니다. Auto는 함수 내에서 지역 변수를 정의하는 데만 사용할 수 있습니다.

스토리지 클래스 등록

이름에서 알 수 있듯이 레지스터 스토리지 클래스는 레지스터 변수를 선언하는 데 사용됩니다. 레지스터 변수의 모든 기능은 컴파일러가 자유 레지스터를 사용할 수있는 경우 이러한 변수를 마이크로 프로세서의 레지스터에 저장하려고한다는 점을 제외하면 auto 변수와 동일합니다. 사용 가능한 레지스터를 사용할 수없는 경우 메모리에만 저장됩니다.

따라서 레지스터 변수에 대한 작업은 프로그램 런타임 동안 메모리에 저장된 다른 변수보다 훨씬 빠릅니다.

일반적으로 프로그램의 실행 시간을 향상시키기 위해 프로그램에서 자주 액세스해야하는 변수는 레지스터 저장소 클래스 내에서 선언됩니다. 레지스터 변수의 주소는 포인터를 사용하여 얻을 수 없습니다.

변수의 최대 크기는 레지스터의 크기와 같습니다 (예 : 대략 한 단어). 메모리 위치가 없기 때문에 단항‘&’연산자를 적용 할 수 없습니다.

통사론:

데이터 유형 var_name1 등록 [= 값]

예:

Java에서 분할은 무엇을합니까?
{int pi 등록}

'레지스터'를 정의한다고해서 변수가 레지스터에 저장되는 것은 아닙니다. 하드웨어 및 구현 제한에 따라 레지스터에 저장 될 수 있습니다.

등록 및 자동 저장 클래스의 예를 살펴 보겠습니다.

예:

#include using namespace std // extern으로 만들 변수 선언 // 초기 값은 x int x void autoStorageClass () {printf ( 'nDemonstrating auto classnn') // 자동 변수 선언 (간단히 // 'int a = 32'쓰기도 작동 함) int num = 32 // 자동 변수 출력 'a'printf ( '자동으로 선언 된'num ''변수의 값 : % dn ', num) printf ( '--------------------------------')} void registerStorageClass () {printf ( 'nDemonstrating register classnn') / / 레지스터 변수 선언 register char c = 'G'// 레지스터 변수 인쇄 'b'printf ( '변수'c '' '레지스터로 선언 된 값 : % dn', c) printf ( '---- ---------------------------- ')} int main () {// 자동 스토리지 클래스 시연 autoStorageClass () // 시연 레지스터 스토리지 클래스 registerStorageClass () return 0}

산출:

출력-C ++의 저장소 클래스-Edureka정적 스토리지 클래스

정적 저장소 클래스는 다음을 선언하는 데 사용됩니다. 정적 변수 . 정적 변수는 범위를 벗어난 경우에도 값 (즉, 마지막 값)을 유지합니다. 정적 변수는 한 번만 초기화됩니다.프로그램이 종료 될 때까지 존재합니다.

메모리는 정적 변수에 한 번만 할당되며 다시 선언되지 않으므로 새 메모리가 할당되지 않습니다. 전역 정적 변수는 프로그램의 어느 곳에서나 액세스 할 수 있습니다. 기본적으로 컴파일러에 의해 값 0이 할당됩니다.

C ++의 goto 문

C ++에서 static이 클래스 데이터 멤버에 사용되면 해당 멤버의 복사본 하나만 해당 클래스의 모든 개체에서 공유됩니다.

통사론:

정적 데이터 유형 var_name1 [= value]

예:

#include void function (void) static int c = 5 // 전역 정적 변수 main () {while (c--) {function ()} return 0} void function (void) {static int cnt = 2 cnt ++ std :: cout<< 'cnt is ' << cnt std::cout << ' and c is ' << c << std::endl } 

산출:

외부 스토리지 클래스

변수를 여러 파일에서 공유해야하는 경우 extern 스토리지 클래스가 필요합니다. Extern 변수에는 전역 범위가 있으며 이러한 변수는 선언 된 파일 외부에서 볼 수 있습니다. extern 변수는 모든 프로그램에 표시됩니다. 둘 이상의 파일이 동일한 변수 또는 기능을 공유하는 경우 사용됩니다.

extern 변수의 수명은 선언 된 프로그램이 종료되는 한 지속됩니다. 일반 전역 변수는 함수 / 블록에서 선언 / 정의 앞에 'extern'키워드를 배치하여 extern으로 만들 수도 있습니다.

'extern'을 사용하면 이전에 정의 된 저장 위치에있는 변수 이름을 가리 키기 때문에 변수를 초기화 할 수 없습니다.

통사론

외부 데이터 유형 var_name1

#include int cnt extern void write_extern () main () {cnt = 5 write_extern ()}

두 번째 파일 : support.cpp

#include extern int cnt void write_extern (void) {std :: cout<< 'Count is ' << cnt << std::endl } 

여기에서는 extern 키워드를 사용하여 다른 파일에서 cnt를 선언합니다. 이제이 두 파일을 다음과 같이 컴파일하십시오.

$ g ++ main.cpp support.cpp -o 쓰기

이것은 쓰기 실행 프로그램을 생성하고 쓰기를 실행하고 다음과 같이 결과를 확인합니다.

$. / 쓰기

5

C ++의 스토리지 클래스로 넘어 가서 마지막 항목 인 Mutable 스토리지 클래스를 살펴 보겠습니다.

가변 스토리지 클래스

변경 가능한 지정자는 클래스 개체에만 적용되므로 개체의 멤버가 const 멤버 함수를 재정의 할 수 있습니다. 즉, 변경 가능한 멤버는 const 멤버 함수로 수정할 수 있습니다.

마지막으로 서로 다른 스토리지 클래스 간의 차이점을 이해하기 위해 비교 표를 살펴 보겠습니다.

스토리지 클래스

예어

일생

시계

초기 값

자동적 인

자동

기능 블록

현지

찌꺼기

외부

외부

전체 프로그램

글로벌

제로

공전

공전

전체 프로그램

현지

제로

레지스터

레지스터

기능 블록

현지

찌꺼기

자바의 문자열 기본값

변하기 쉬운

변하기 쉬운

수업

현지

찌꺼기

이제 위의 C ++ 프로그램을 살펴본 후 C ++의 다른 스토리지 클래스가 무엇인지, 그리고이를 구현하는 방법을 이해했을 것입니다. 이 블로그가 유익하고 가치가 있기를 바랍니다.

따라서 우리는 'C ++의 스토리지 클래스'에 대한이 기사의 마지막 부분에 이르렀습니다.

자세한 내용은 다음을 확인하십시오. 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.