공부하자/C언어

C언어 문법 공부 4장 [C언어의 정적 변수]

YoBot 2016. 11. 19. 14:08

3. 정적 변수


정적 변수에는 크게 두가지로 나눌수 있는데 정적 지역 변수와 정적 전역 변수 입니다. 

(1) 정적 지역 변수


지역변수를 배울때 지역변수는 그 변수가 선언된 블럭이 끝나면 그 변수안에 들어있는 값을 잃는다고 했습니다.


그런데 이걸 잃게 하지 않을때 쓰는 것이 정적 지역 변수 입니다.


정적 지역 변수는 지역 변수 선언 앞에 static키워드만 붙여 주면 됩니다.


예를 들어 

static int a; 

이런 식으로 이렇게 해주면 이 변수가 선언된 블럭이 끝나도 그 안에 들어있는 값을 잃지 않죠.


/* 파일 이름 : C4-5.C프로그램 내용 : 정적 지역 변수를 설명하는 프로그램. */


#include <stdio.h>

void func(){

int a=0;

a=a+1;

printf("%d\n",a);

}


void main(){

func();

func();

func();

이 프로그램의 실행 결과는 어떻게 될까요? 


C:\>C4-5.EXE


1


1



C:\> 

이렇게 나옴니다. 왜 그런줄은 다 아실꺼에요.


그런데 여기서 func함수 내의 a변수를 정적 변수로 선언하면 

/* 파일 이름 : C4-6.C 프로그램 내용 : 정적 지역 변수를 설명하는 프로그램. */


#include <stdio.h>

void func(){

static int a=0;

a=a+1;

printf("%d\n",a);

}


void main(){

func();

func();

func();

이렇게


그러면 결과는 어떻게 바꿜까요????


a라는 변수는 func함수가 끝나도 그 안의 값이 보관 되므로 

C:\>C4-6.EXE


1


2


C:\> 

이런 결과가 나오겠죠?


이제 정적 지역 변수에 대해서는 이해가 되셨죠?? 


(2) 정적 전역 변수

정적 전역 변수를 하기 전에 한가지 의문정이 생기실 겁니다.


변수는 프로그램이 끝날때까지 그 값이 유지되는데 정적 전역 변수라는게 왜 따로 있을까요???


사실 정적 전역 변수와 정적 지역 변수의 의미는 크게 다름니다.


static키워드를 붙여 전역 변수를 선언하면 즉 정적 전역 변수를 선언하면외부 소스에서 이 변수를 엑세스 할수 없게 되죠 

그게 정적 전역 변수의 주 목적 입니다.


그런데 외부 소스의 전역 변수 엑세스를 배우지 않았으므로 아직 이해가 되지 않으실 겁니다.


자세한건 나중에 배우기로 하고 넘어가죠.


이것으로 C언어의 데이터 부분은 마치도록 하죠.