struct Point2D movePoint(int offset)
{
}이렇게 작성했다면 반환값이 무엇일까요?
p1.x는 int
p1.y는 int
int + int이므로 결과도 int이므로 return은 int 형식을 반환하게 됩니다.
함수가 원하는 요구사항은 struct Point2D이므로 형식이 일치하지 않습니다.
메시지 "반환 값 형식이 함수 형식과 일치하지 않습니다"
반환 값 형식: int
함수 형식: struct Point2D
int main()
{
int num1;
struct Point2D p;
scanf("%d", &num1);
p = movePoint(num1);
p는 struct Point2D입니다.
심사문제를 제출할 때 보는 해설을 보세요.
해설
함수 movePoint를 호출할 때마다 반환값이 달라지고 있습니다. 실행 결과의 x, y가 입력 값만큼 증가해야 하므로 더하는 값이 사라지지 않고 계속 누적되어야 합니다. 따라서 movePoint 안에서 Point2D 구조체를 정적 변수로 선언하고 최초 좌표 10, 20으로 초기화합니다. 그리고 x, y에 매개변수 offset을 더하여 반환해주면 됩니다.
강조하면
따라서 movePoint 안에서 Point2D 구조체를 정적 변수로 선언하고 최초 좌표 10, 20으로 초기화합니다
static struct Point2D tmp = {10, 20};
이것이 이 문장이 의미하는 코드입니다.
왜 '정적 변수도 선언하고'라고 썼을까요?
함수 안에서 생성한 변수는 함수가 종료되면 사라집니다.
함수 안에서 생성한 변수가 사라지지 않으려면 static으로 선언한 변수이거나 malloc으로 메모리를 할당한 변수여야 합니다.
그러나 문제에서 요구하는 movePoint 함수의 원형을 보면
struct Point2D movePoint(int offset)
입니다.
UNIT 79.2를 보면
variable.c
#include <stdio.h>
void increaseNumber()
{
int num1 = 0; // 변수 선언 및 값 초기화
printf("%d\n", num1); // 변수 num1의 값을 출력
num1++; // 변수의 값을 1씩 증가
}
int main()
{
increaseNumber(); // 0
increaseNumber(); // 0
increaseNumber(); // 0
increaseNumber(); // 0: 변수가 매번 생성되고 사라지므로 0이 출력됨
return 0;
}
실행 결과
0
0
0
0
이 문제를 해결하기 위해 static을 도입합니다.
함수 단원을 복습하는 것도 좋고, <C 언어 코딩 도장>에서 어려운 부분은 넘어가면서 1회독하고 2회독하는 것도 좋습니다.