구조체는 함수의 인수나 함수의 반환값으로 사용될 수 있다. 구조체를 함수의 인수로 전달할 때는 구조체 자체를 전달하는 방법과 구조체의 주소를 전달하는 방법이 있다.
(1)구조체의 멤버를 함수의 인수로 전달하는 경우
//두 점사이의 거리를 구하는 프로그램
(2) 구조체 변수를 함수의 인수로 전달하는 경우
//구조체를 인수로 전달하는 방법
#include <stdio.h>
#include <math.h>
typedef struct{
int x, y;
}POINTER;
double distance (POINTER p1, POINTER p2);
int main()
{
POINTER p1, p2;
double dist;
printf("please enter x & y coordinate : ");
scanf("%d %d", &p1.x, &p1.y);
printf("please enter x' & y' coordinate : ");
scanf("%d %d", &p2.x, &p2.y);
dist = distance (p1, p2); //구조체 변수를 인수로 전달
printf("distance : %6.3f\n", dist);
return 0;
}
double distance (POINTER p1, POINTER p2)
{
int square1, square2;
square1 = (p2.x - p1.x) * (p2.x - p1.x);
square2 = (p2.y - p1.y) * (p2.y - p1.y);
return (sqrt (square1 + square2));
}
(3) 구조체의 주소를 인수로 전달하는 방법
//구조체의 주소를 인수로 전달하는 방법
결과는 모두 같다.
하지만 (1)과 (2)를 비교하면
(1)dist = distance(p1.x, p1.y, p2.x, p2.y);
(2)dist = distance (p1, p2);
보는 것처럼 함수 인자 개수가 줄어든다.
(2)와 (3)을 비교하면
(2)double distance (POINTER p1, POINTER p2);
(3)double distance (POINTER *p1, POINTER *p2);
(2)는 구조체내에 int x, y가 있어서 POINTER가 각각 8바이트이지만, (3)은 포인터를 인자로 하기에 각각 4바이트이다.
결과적으로 (3)의 방법이 가장 효율적이다.
(1)구조체의 멤버를 함수의 인수로 전달하는 경우
//두 점사이의 거리를 구하는 프로그램
#include <stdio.h> |
//구조체를 인수로 전달하는 방법
#include <stdio.h>
#include <math.h>
typedef struct{
int x, y;
}POINTER;
double distance (POINTER p1, POINTER p2);
int main()
{
POINTER p1, p2;
double dist;
printf("please enter x & y coordinate : ");
scanf("%d %d", &p1.x, &p1.y);
printf("please enter x' & y' coordinate : ");
scanf("%d %d", &p2.x, &p2.y);
dist = distance (p1, p2); //구조체 변수를 인수로 전달
printf("distance : %6.3f\n", dist);
return 0;
}
double distance (POINTER p1, POINTER p2)
{
int square1, square2;
square1 = (p2.x - p1.x) * (p2.x - p1.x);
square2 = (p2.y - p1.y) * (p2.y - p1.y);
return (sqrt (square1 + square2));
}
(3) 구조체의 주소를 인수로 전달하는 방법
//구조체의 주소를 인수로 전달하는 방법
#include <stdio.h> |
결과는 모두 같다.
하지만 (1)과 (2)를 비교하면
(1)dist = distance(p1.x, p1.y, p2.x, p2.y);
(2)dist = distance (p1, p2);
보는 것처럼 함수 인자 개수가 줄어든다.
(2)와 (3)을 비교하면
(2)double distance (POINTER p1, POINTER p2);
(3)double distance (POINTER *p1, POINTER *p2);
(2)는 구조체내에 int x, y가 있어서 POINTER가 각각 8바이트이지만, (3)은 포인터를 인자로 하기에 각각 4바이트이다.
결과적으로 (3)의 방법이 가장 효율적이다.