- main 함수가 어디에 있는지 본다
- 변수를 정리한다. a는 정수를, c와 d는 실수를 담는 변수이다
- 3.5를 3에 대입하면, a는 정수형 변수이기에 3이 된다
- 3을 c에 대입하면, c는 실수형 변수이기에 3.0이 된다.
- d는 연산자 우선순위에 따라 a/2를 먼저 하고 (3/2=1) 3+1+3.0 = 7.0이 된다
a | c | d |
3 | 3.0 | 7.0 |
- main 함수가 어디에 있는지 본다, main에서 func(i)를 호출하는 문제이다.
- main에서 i를 선언했고, 5부터 시작해서 0이상일 때까지 반복한다 i는 1씩 감소한다.
- 2로 나눴을때 나머지가 1이라면 func(i) 함수를 호출한다.
- 함수 func(5)는 num이 1이 아니니까 return 5 * func(4)
- func(4)는 num이 1이 아니니까 return 4 * func(3) .... 를 반복한다
- func(1)이 되었을때 num이 1이므로 return=1; 해서 값을 호출한 곳으로 돌아간다.
- 즉, 5 * 4 * 3 * 2 = 120이 된다.
i | |
5 | func(5) : 120 |
i 값을 하나 감소시켜서 4가 된다.
4는 2로 나누면 나머지가 0이 되므로 함수를 다시 수행한다
i 값을 하나 감소시켜서 3이 된다
func(3) 함수를 호출하면 위와 같은 방식으로 func(3) = 3*2 = 6이 된다.
이렇게 세번째 줄을 출력하면 func(1) : 1 을 출력한다.
i | |
5 | func(5) : 120 |
4 | |
3 | func(3) : 6 |
2 | |
1 | func(1) : 1 |
배열의 특성
int a[ ]
a[0] | a[1] | a[2] | a[3] | a[4] | a[5] | a[6] | a[7] | a[8] | a[9] |
10 | 20 | 30 | 40 | 50 | +0 | 70 | 80 | 90 | 100 |
a | a+1 | a+2 | a+3 | a+4 | a+5 | a+6 | a+7 | a+8 | a+9 |
ptr 이란 포인터 변수로 주소를 기억하는 변수이다.
a+3이므로 a[3]을 기억한다 = 40
i는 0부터 5보다 작을때까지 1씩 증가한다.
i | *(ptr + i) -3 | 출력 |
0 | 40-3 | 37 |
1 | 50-3 | 47 |
2 | 60-3 | 57 |
3 | 70-3 | 67 |
4 | 80-3 | 77 |
- 정수/정수 = 정수이다.
- 1/2 = 0.5이므로 0이다. 따라서 a = 4 * 0 = 0이다
- a++는 대입을 하고 1을 증가시킨다. 따라서 b = 0이고 그 다음에 1이 증가한다.
- b를 출력하면 0이 된다
a | b |
12 | 4 |
- return b? -> 0을 제외한 숫자는 참이된다 b는 4이므로 f(4, 12%4)를 출력한다
- f(4, 0)을 호출하면 새로운 int 4와 0이 되어서 b는 0이 되므로 거짓이다
- a의 값인 4를 호출하고 함수는 종료된다.
main 함수가 어디에 있는지 본다.
i | sum |
0 | 0 + foo() |
foo() 함수는 정수형 변수 var1과 값을 보존하는 정적변수 var2로 구성된다.
var1 | var2 (정적변수) |
1 | 1 |
return (var1++ ) + (var2++) //리턴을 하고나서 1을 증가시킨다. 1+1=2를 함수를 호출한 곳으로 돌려준다
sum = sum + foo() //0 + 2가 된다.
i값을 하나 증가시키고 함수를 다시 반복한다
foo() 함수를 다시 호출시킨다
var1 | var2 (정적변수) |
1 | 1 |
2 |
var1은 초기화 되었지만 var2는 값을 보존하는 정적변수이기 때문에
값이 1이 증가한 2가 된다. 1+2를 함수를 호출한 곳으로 돌려준다
sum 값은 기존의 2에 3을 더하여 5가 된다.
i를 1 증가시키고 foo()를 호출하면?
var1 | var2 (정적변수) |
1 | 1 |
1 | 2 |
1 | 3 |
i | sum |
0 | 0 + 2 |
1 | 2 + 3 |
2 | 5 + 4 |
즉 sum = 9를 출력한다
'컴퓨터 일반 > 프로그래밍언어론' 카테고리의 다른 글
프로그래밍언어 문제(2) (2) | 2024.10.21 |
---|---|
프로그래밍(4) C언어 포인터, 배열 (6) | 2024.10.17 |
프로그래밍(3) 제어문 (1) | 2024.10.16 |
프로그래밍(2) C언어 연산자 (4) | 2024.10.16 |
프로그래밍(1) 순서도, C언어 기초 (3) | 2024.10.16 |