구조체는 정의되면 새로운 자료형처럼 사용할 수 있으며 기본 자료형을 함수에 넘기는 것과 동일한 방법으로 구조체 변수도 사용할 수 있다. 전 절에서 예로 든 Point 구조체를 예로 들어서 두 점간의 거리를 구하는 함수를 작성해 보자. 함수의 이름은 getDist()라고 하고 Point 구조체 변수 두 개를 받아서 double형 값(거리)를 반환해야 한다. 함수 본체는 다음과 같이 작성할 수 있다.
double getDist(Point a, Point b) {double dx = b.x - a.x;double dy = b.y - a.y;double dist = sqrt(dx*dx + dy*dy);return dist;} |
여기서 함수 헤더를 보면 기본 자료형의 경우와 동일한 방법으로 포인터 변수를 받음을 알 수 있다. 지역변수 a와 b는 Point형 변수이므로 Point구조체의 필드를 사용할 수 있다.
두 점의 거리를 구하는 전체 프로그램은 다음과 같다.
ex08-06.c |
#include <stdio.h>#include <math.h>typedef struct {double x;double y;} Point;double getDist(Point a, Point b);int main(int argc, char **argv) {Point a = {1.1, 2.2};Point b = {3.3, 4.4};double dist = getDist(a, b); //함수 호출printf("a = {%f, %f}\n", a.x, a.y);printf("b = {%f, %f}\n", b.x, b.y);printf("dist = %f\n", dist);}double getDist(Point a, Point b) {double dx = b.x - a.x;double dy = b.y - a.y;double dist = sqrt(dx*dx + dy*dy);return dist;} |
실행 결과 |
a = {1.100000, 2.200000}b = {3.300000, 4.400000}dist = 3.111270 |
함수 getDist() 내에서 수학함수 sqrt()를 사용하기 위해서 math.h를 인클루드 시켰다.
이와 같이 구조체를 정의하는 것은 새로운 자료형을 만드는 것과 같다. 구조체가 한 번 정의되면 기본 자료형과 동일한 방법으로 변수를 생성할 수 있고 함수의 인자로 넘길 수 있으며 함수의 반환값이 될 수도 있다. 예를 들어서 두 점의 좌표를 받아서 Point형 변수를 반환하는 간단한 함수를 작성해 보자.
ex08-07.c |
#include <stdio.h>typedef struct {double x;double y;} Point;Point getPoint(double, double); //← (1)int main(int argc, char **argv) {Point a = getPoint(0,0);Point b = getPoint(1,1);printf("a = {%f, %f}\n", a.x, a.y);printf("b = {%f, %f}\n", b.x, b.y);}Point getPoint(double x, double y) {Point a = {x, y};return a;} |
실행 결과 |
a = {0.000000, 0.000000}b = {1.000000, 1.000000} |
이 예에서 getPoint()함수는 Point형 변수를 반환한다. 따라서 함수를 선언할 때 반환형을 (1)과 같이 명시해야 한다. 그리고 함수 내부에서는 Point형 변수를 return해야 한다.
'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글
(C언어) 구조체 배열 (0) | 2016.02.01 |
---|---|
(C언어) 구조체 변수를 필드로 가지는 구조체 (0) | 2016.02.01 |
(C언어) 구조체 필드의 초기화 (1) | 2016.01.29 |
(C언어) 구조체(struct) 정의 (0) | 2016.01.29 |
Windows 7에서 MinGW 설치하고 설정하기 (0) | 2015.06.30 |