728x90
반응형
Call_By_Value로 구조체의 반환과 전달
구조체도 함수를 통해 반환되거나 매개변수로써 함수에 전달될 수 있다.
구조체를 반환하는 함수를 선언하는 방법은 자료형 대신에 구조체의 이름을 사용자 정의 자료형으로 정의한 후
그 이름을 넣어주면 된다.
예시로 구조체를 반환하고 전달하는 함수를 사용하여 두 점의 거리를 구하는 코드를 작성해 보겠다.
#include <stdio.h>
typedef struct {
int x1;
int x2;
} X;
X Plus (X pos) {
pos.x1++;
pos.x2++;
return pos;
}
int main()
{
X pos1 = {5, 10};
X pos2;
pos2 = Plus(pos1);
printf("%d %d\n", pos1.x1, pos1.x2);
printf("%d %d", pos2.x1, pos2.x2);
return 0;
}
위 코드를 실행해 보면 Plus 함수에서 pos1 의 값이 1 증가하여 pos2 에 대입된 것을 확인할 수 있다.
그러나 Call_By_Value 로 값을 전달했기 때문에 pos1 의 값은 변함이 없다.
Call_By_Reference 로 구조체의 전달
다른 변수들과 마찬가지로 포인터를 사용하면 구조체도 Call By Reference 방식으로 전달이 가능하다.
이 때 함수의 매개변수 자리에 포인터 구조체를 넣기만 하면 된다.
#include <stdio.h>
typedef struct {
int x1;
int x2;
} X;
X Plus (X* pos) {
pos->x1++;
pos->x2++;
return *pos;
}
int main()
{
X pos1 = {5, 10};
X pos2;
pos2 = Plus(&pos1);
printf("%d %d\n", pos1.x1, pos1.x2);
printf("%d %d", pos2.x1, pos2.x2);
return 0;
}
pos1과 pos2 모두 (6, 11) 이 된 것을 확인할 수 있다.
728x90
반응형
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 매크로 (define, 오브젝트 유사 매크로, 매크로 함수) (0) | 2024.02.25 |
---|---|
[C언어] 구조체의 중첩 (0) | 2024.02.25 |
[C언어] 사용자 정의 자료형(typedef), 구조체 typedef 선언 (0) | 2024.02.23 |
[C언어] 구조체(struct), 구조체 배열, 구조체 포인터, 화살표 연산자, 구조체 변수의 주소값 (0) | 2024.02.23 |
[C언어] 버퍼(Buffer), 입출력버퍼 비우기(fflush) (0) | 2024.02.22 |