본문 바로가기
프로그래밍언어/C 언어

[혼자 공부하는 C언어] 주소를 반환하는 함수

by khsnote22 2022. 12. 11.

http://www.yes24.com/Product/Goods/74269921

 

혼자 공부하는 C 언어 - YES24

혼자 해도 충분하다! 1:1 과외하듯 배우는 C 프로그래밍 자습서이 책은 독학으로 C 언어를 배우는 입문자가 ‘꼭 필요한 내용을 제대로’ 학습할 수 있도록 구성했다. ‘무엇을’ ‘어떻게’ 학

www.yes24.com


반환값이 있는 함수는 호출한 함수로 값을 복사해서 반환합니다. 함수 안에서 사용한 지역 변수는 함수가 반환되면 저장 공간이 사라지므로 그 값을 복사하여 반환해야 호출한 함수에서 사용할 수 있습니다. 그러나 함수가 반환된 후에도 변수의 저장 공간이 곘혹 유지된다면 주소를 반환하여 호출하는 함수에서 쓸 수도 있습니다. 즉, 정적 지역 변수와 전역 변수는 주소를 반환할 수 있습니다.

 

#include <stdio.h>

int* sum(int a, int b); // int형 변수의 주소를 반환하는 함수 선언

int main(void) 
{
	int *resp; // 반환값을 저장할 포인터 resp
	
	resp = sum(10, 20); // 반환된 주소는 resp에 저장
	printf("두 정수의 합 : %d\n", *resp); // resp가 가리키는 변숫값 출력
	
	return 0;

}

int* sum(int a, int b) // int형 변수의 주소를 반환하는 함수
{
	static int res; // 정적 지역 변수

	res = a + b; // 두 정수의 합을 res에 저장

	return &res;
}

 

이처럼 주소를 반환하는 함수를 만들 때는 주의할 것이 있습니다. 반환값의 자료형은 반환값을 저장할 포인터의 자료형과 같아야 합니다. 또한 지역 변수의 주소를 반환해서는 안됩니다.