iOS/정보처리기사

[정보처리기사] C언어 - 함수가 주소를 리턴하는 경우.

Chafle 2022. 6. 22. 19:29
반응형

 

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

반응형