언어/C언어_기초

49강 | STATIC 변수 (1)

hyehh 2024. 2. 27. 09:01
728x90
반응형
SMALL
728x90
반응형
SMALL

49강 | STATIC 변수 (1) 

자료 출처 - 깨알 C언어 | 49. STATIC 변수 (1) (youtube.com)


 

static 변수

단 한번만 초기화 하고, 그 이후에는 전역변수처럼 프로그램이 종료될때까지 메모리공간에 존재하는 변수

초기값이 지정이 안되면, 자동으로 0이 대입

 

지역 변수 사용

 

지역 변수같은 경우에는 

만약 main() 함수에서 test() 함수를 호출 했다면, test()로 제어권이 넘어간다음에 int a라는 공간이 만들어지고, 그 공간에 10값이 들어갈 것이다. 그리고 나서 a++을 하게 되면 a값은 11이 들어가있을것이다. 프린트에프 출력할것인데 %d 정수값을 출력할것이다. 11이 출력된다. 그리고 끝났으니깐 test()에서 사용했던 지역변수 a는 없어지게 된다. 

그리고 또 main()의 두번째 test()로 가게 된다. 그러면 다시 제어권이 올라간 다음에 a라는 변수가 다시 만들어지게 되는것이고, a에 10이라는 값이 들어가고, a++을 하게 되면 11이 들어가고 출력할때 11이 출력된다. 

 

Static 변수 사용

main 함수에서 test() 함수를 호출 했다면, 제어권이 올라가고 static이네? 정적변수야

int a라는 공간을 똑같이 만들어놨는데, 애는 static 한거지, 그리고 초기값으로 10을 집어넣었다. 그러면 10값이 대입이 되는것이다. 그리고 나서 a++을 해주면 a라는 공간의 값은 11이 된다. 그리고나서 프린트를 할것인데, 11출력이 된다. 여기까지는 똑같다.

 

a가 11이 들어가있는상태에서 함수가 종료가 되게 되면 지역변수들은 메모리상에서 사라지게 된다. 근데, static은 메모리상에 그대로 남아있다.

 

main()으로 제어권이 넘어가고 다시 두번째 test() 함수를 호출한다.

그러면 제어권이 test()로 올라가서 static int a 라는 것을 봤더니, 애는 이미 메모리상에 있네? 라고 판단하여 = 10 대입하는 부분을 수행하지 않는다. 초기값은 한번만 수행하는 것이니깐, 그리고 밑의 a++을 하게 되면 a라는 공간의 값은 12가 된다. 그러면 12가 출력된다. 이게 지역변수와 정적변수 static 변수의 차이점이다. 

 

static 변수같은 경우에는 메모리상에 한번 올라가면 다시는 초기값을 하지 않는다.

한번만 초기값을 주게되는것이다.메모리상에 있으면 아무것도 안한다. 


num=

 

0; for 0<2 참 funCount()    출력 num=1, count=0                count=1

1; for 1<2 참 funCount()    출력 num=1, count=1                count=2

2; for 2<2 거짓


 

728x90
반응형
LIST