본문 바로가기

C언어/C언어 문법

[C언어] 함수로의 구조체 변수 전달과 구조체 반환 함수

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
반응형