#include <stdio.h>
int *sum(int a, int b);
int main(void){
int *resp;
resp = sum(10,20);
printf("two integer sum : %d\n", *resp);
return 0;
}
int *sum(int a, int b){
static int res;
res = a + b;
return &res;
}
- **함수 선언**: `int *sum(int a, int b);`
- `sum` 함수는 두 정수 `a`와 `b`를 매개변수로 받아, 그 합을 계산하고 결과의 주소를 반환합니다.
- **`main()` 함수**
1. **포인터 변수 선언**:
- 정수형 포인터 변수 `resp`를 선언합니다. 이 변수는 나중에 `sum` 함수로부터 결과값의 주소를 받아 저장할 예정입니다.
2. **함수 호출 및 결과 저장**:
- `sum` 함수를 호출하면서, 정수 10과 20을 인자로 전달합니다. `sum` 함수는 이 두 수의 합을 계산한 뒤, 그 결과의 주소를 반환합니다.
- 반환된 주소는 `resp` 포인터 변수에 저장됩니다.
3. **결과 출력**:
- `printf` 함수를 사용하여, `resp` 포인터 변수가 가리키는 값을 출력합니다. 출력된 값은 두 정수의 합, 즉 30이 됩니다.
4. **프로그램 종료**:
- `return 0;`을 사용하여 프로그램이 성공적으로 실행되었음을 나타내며, 프로그램을 종료합니다.
- **`sum` 함수**: `int *sum(int a, int b);`
- 이 함수는 정적 지역 변수 `res`를 선언하고, 매개변수로 받은 두 정수의 합을 이 변수에 저장합니다.
- 함수는 `res`의 주소를 반환합니다. 정적 지역 변수의 주소를 반환하는 것은 안전하며, 함수 호출이 끝난 후에도 변수 `res`는 메모리에 남아 있습니다.
'개념 > 혼자 공부하는 C언어' 카테고리의 다른 글
chapter 13) 10을 더하기 위해 값을 인수로 주는 경우 (0) | 2024.09.02 |
---|---|
chapter 13) 포인터를 써서 변수의 값에 10을 더하는 경우 (0) | 2024.09.01 |
chapter 13) 전역 변수의 사용 (0) | 2024.08.30 |
chapter 13) 레지스터 변수를 반복문에 사용한 예 (0) | 2024.08.29 |
chapter 13) 두 함수에서 같은 이름의 지역 변수를 사용한 경우 (0) | 2024.08.28 |