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;
}

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

업데이트: