본문 바로가기
C/기말고사 대비(2022 1학기)

[c언어 시험대비] static과 재귀

by Meaning_ 2022. 6. 6.
728x90
반응형

https://june98.tistory.com/79

 

[C/C++언어] static 변수를 쓰는 이유 (feat. 메모리 구조)

[C/C++언어] static 변수를 쓰는 이유 (feat. 메모리 구조) 과제를 하던 도중, static 변수를 쓰지 않으면 풀 수 없는 문제를 만났다. 사실 코딩을 하면서 static이라는 변수를 만난 적이 거의 없어서 잘 모

june98.tistory.com

 

 

static

 

 

답은 0 0 0 0 0 3 일것이다.

 

t같은 경우는 그냥 지역변수이기 때문에 함수가 호출될때 마다 계속 0으로 초기화되고 후위증가이기때문에 0만 출력되는 것이다.

num은 전역변수이기 때문에 main함수 밖에서도 값에 접근 할 수 있을 것이다.

 

이 경우는 살짝 답이 달라진다.

답이 0 1 2 3 4 3이다. 

 

여기서 static의 특징이 나오는데 static변수의 값은 함수가 종료되더라도 프로그램이 종료되지 않는 이상 메모리상에

남아있다. 그래서 값이 누적되는 것이다. 그리고 마지막은 아까처럼 맨위에 전역변수이고

 

만약 이름을 똑같이 t로 설정해도 함수 바깥에 선언한 t가 호출되는데 이때 Song함수 외부에 있는 static 변수인 t는 전역으로 선언되고 이 친구를 외부정적변수라 한다.  -> 이렇게 전역으로 선언한 static 변수는 소스파일 내 모든 함수에서 사용이 가능하다. 

 

Song 함수 내부에서 선언된 static변수는 내부 정적변수라고 한다. 얘도 static의 성질을 가지고 있어서 함수가 아닌 프로그램이 시작될때 초기화돼서 값이 누적될 수 있는것이다!

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=dd1587&logNo=221106199316 

 

C언어 static변수(정적변수)

C언어 static변수(정적변수)C언어 static변수에 대해 알아보려고하는데요. static변수는 한글로는 정적변...

blog.naver.com

 

 

주의해야할 것 ! static과 전역변수

 

static이랑 전역변수 개념을 혼돈하는 것 같은데 둘은 다르다.

static은 프로그램이 실행될때만 초기화 돼서 누적하는 값을 쓸때 유용한 친구고

전역변수는 말 그대로 함수들 밖에 선언한 변수다.!!

 

재귀

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int Sum(int n) {
    if (n == 0) {
        return 0;
    }
    else {
        return n + Sum(n - 1);
    }
 
}
 
int Fac(int n) {
    if (n == 1) {
        return 1;
    }
    else {
        return n* Fac(n - 1);
    }
 
}
 
int main() {
    printf("%d\n", Sum(3));
 
    printf("%d\n", Fac(5));
    
 
}
cs
728x90
반응형

댓글