title: “C언어 구조체 2 구조체와 함수” categories:

  • C

    #C언어 구조체 2 구조체와 함수 : 네이버 블로그

저번 포스팅에서 구조체의 선언,배열,포인터에 알아보았다

오늘은 구조체와 함수에 대해 알아보겠다

함수에서 사용하는 구조체는 인수로 받는것과 반환값을 구조체로 사용하는 2가지가 있다.

먼저 구조체를 인수로 넘기는 방법이다.

구조체도 다른 자료형들처럼 복사본이 함수로 전달된다.

또는 다른 자료형과 마찬가지로 포인터변수를 인수로 받아 원본을 직접 쓰는 방법이 있다.

구조체 포인터를 사용하게 되면 전 포스팅에서 배웠던 간접맴버연산자인 ->을 사용한다.

구조체 함수를 반환값으로 넘길 때 중요한점은

함수의 반환형이 구조체형이므로 다른 자료형들 함수처럼

struct (구조체이름) 함수이름(인수)

로 써야 한다.

나머지는 다른 자료형들과 마찬가지로 변수, 또는 포인터로 넘기면 된다.

주의할점은 변수로 넘길 시 복사본이 전달되므로 정확한 구조체변수를 가지고 있어야 한다.

또 포인터를 사용해 넘길 시 원본은 함수 안에 저장되므로 지역 변수임을 상기해야한다.

아래 예제를 보자

#include
struct point //구조체 선언
{
 int x;
 int y;
};
struct point add\_point(struct point c, struct point d); //구조체 포인터 선언 입력,반환은 구조체
int main() {

 struct point a = { 1,2 };
 struct point b = { 3,4 };

 
 struct point sum = add\_point(a, b); //a,b구조체를 인수로 받고 반환값을 sum구조체 변수에 저장
 printf("%d %d\n", sum.x, sum.y); //반환값은 구조체 sum.x,sum.y에 저장되므로 이를 출력
}
struct point add\_point(struct point c, struct point d) {
 struct point result;
 result.x = c.x + d.x;
 result.y = c.y + d.y;
 return result;
}

구조체를 어떻게 이용하느냐에 따라 데이터의 흐름이 깔끔해진다 적재적소에 활용하자.

업데이트: