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
주의해야할 것 ! 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 |
'C > 기말고사 대비(2022 1학기)' 카테고리의 다른 글
[기말고사 기출문제 풀이] 2016년 기말(가) (0) | 2022.06.08 |
---|---|
[C언어 시험대비] 정규표현식 (0) | 2022.06.06 |
[C언어/기말] 포인터를 사용하는 이유 (0) | 2022.05.17 |
22/05/09 포인터 스터디 정리 (0) | 2022.05.09 |
[C언어] 포인터 (0) | 2022.05.03 |
댓글