ex.
#include<stdio.h>
int main() {
int i;
int x = 10;
int *p;
int a[100]
for(i = 0; i <100; i++)
a[i] = i * 10;
p = func(x, a);
printf("sum = %d", x + a[0] + a[1] + p[0] + p[1]);
}
int *func(int a, int *x) {
a = a + 10;
x = x + 1;
*x = *x *2;
return x;
}
해설
int *func(int a, int *x) 자체가 주소값을 리턴하는 함수인 경우이다. 해설을 보면서 공부해 보도록 하자
초기값 세팅
i |
x |
10 |
p |
a | 100번지 | 101번지 | 102번지 | 103번지 | 104번지 | --- | 199번지 |
100번지 | 1 | 2 | 3 | 4 | 5 | --- | 100 |
for(i = 0; i <100; i++) -> i가 0부터 99까지 1씩 증가 연산 하면서
a[i] = i * 10; -> a[0] = 0 *10, a[1] = 1*10 --- 연산을 진행
i | a[i] = i * 10 |
0 | 0 |
1 | 10 |
2 | 20 |
3 | 30 |
4 | 40 |
--- | --- |
99 | 990 |
a | 100번지 | 101번지 | 102번지 | 103번지 | 104번지 | --- | 199번지 |
100번지 | 1 | 2 | 3 | 4 | 5 | --- | 100 |
i=0 | 0 | ||||||
i=1 | 10 | ||||||
i=2 | 20 | ||||||
i=3 | 30 | ||||||
i=4 | 40 | ||||||
i=99 | 990 |
p = func(x, a); -> 10, 100번지 들고 func함수 호출
int *func(int a, int *x)
a = a + 10; -> a에 20 할당
x = x + 1; -> x에 101번지 할당
*x = *x *2; -> x의 값에 x가 참조하고 값 *2할당 (101번지의 값인 10)*2 = 20 할당
return x; -> 현 x주소인 101번지를 호출한 p에 리턴
a | *x | |
a = a+10 | 10+10 | |
x = x+1 | 100번지 +1 = 101번지 | |
func 호출 이후 지역 변수 초기화 |
a | 100번지 | 101번지 | 102번지 | 103번지 | 104번지 | --- | 199번지 |
100번지 | 1 | 2 | 3 | 4 | 5 | --- | 100 |
i=0 | 0 | ||||||
*x = *x *2 | 20 | ||||||
i=2 | 20 | ||||||
i=3 | 30 | ||||||
i=4 | 40 | ||||||
i=99 | 990 |
p |
101번지 |
printf("sum = %d", x + a[0] + a[1] + p[0] + p[1]);
x = 10 ( 101 아님 주의, 지역변수는 함수가 호출되고 바로 사라짐, 전역변수의 x값인 10)
a[0] = 0
a[1] = 20
p[0] = 20 (p가 가르키는 공간은 101번지의 값이고 그 번지의 0 번째 값이니까 해당 번지수(101번지)의 값 출력)
p[1] = 20 (p가 가르키는 공간은 101번지의 값이고 그 번지의 1 번째 값이니까 101번지 다음 값인 102번지의 값 출력
그러므로 각각의 값을 더해주면, 70이 된다.
답 70
'iOS > 정보처리기사' 카테고리의 다른 글
[정보처리기사] C언어 - 함수에 주소를 전달하는 예제3 (2) | 2022.06.22 |
---|---|
[정보처리기사] C언어 - 함수에 주소를 전달하는 예제2 (7) | 2022.06.22 |
[정보처리기사] C언어 - 함수와 변수의 유효범위 (0) | 2022.06.21 |
[정보처리기사] C언어 - 함수에 주소를 전달하는 예제1 (0) | 2022.06.21 |
[정보처리기사] C언어 - 함수, 반복문 예제 (0) | 2022.06.21 |