Visual Studio/C 기초

C언어 구조체의 기본

낙락장송s 2012. 9. 6. 00:18

구조체 하니까 위엄이 느껴지지 않습니까? 매우 중요합니다. 이 글을 읽고 많은 내용 알아가셨으면 좋겠습니다.

구조체의 정의와 선언

구조체는 여러 개의 변수를 쉽게 사용할 수 있도록 하나의 이름으로 묶은 하나 이상 변수들의 집합입니다. 구조체의 장점은 여러가지 데이터 형을 포함할 수 있습니다.

struct cordin {

int x;   

int y;

}

이 것이 구조체 기본 구조입니다.

struct cordin {

int x;

int y;

} 1st, 2nd;

이 문장은 구조체 cordin을 정의하고 cordin형 변수인 1st와 2nd라는 이름의 두 구조체를 선언합니다. 1st와 2nd는 구조체형 변수입니다.

struct cordin 1st, 2nd; 라고 정의할 수도 있습니다.

구조체 멤버를 사용하는 방법

: 개별적인 구조체 멤버는 동일한 형태의 일반적인 변수와 마찬가지 방법으로 사용될 수 있습니다. 구조체 멤버는 구조체 멤버 연산자나 멤버연산자라고 하는 마침표를 사용하여 참조할 수 있습니다. 예를 들어 1st라는 이름의 구조체가 x=50, y=100의 값으로 표현하기 위해서

1st.x=50;

2nd.y=100;    

같은 문장을 사용할 수 있습니다.

1st=2nd;

이 문장은

1st.x = 2nd.x;

1st.y = 2nd.y;

와 같은 뜻을 가집니다. 

간단한 예제를 들어보겠습니다. 시 분 초를 구분하는 구조체입니다.

struct time{

int hours;

int minutes;

int seconds;

}time_of_birth{8,45,0};        // 배열과 비슷하죠? 배열은 하나의 데이터형만을 표현할 수 있지만 구조체는 여러 데이터형을 한꺼번에 다룰 수 있다는게 장점입니다.

구조체를 가지는 구조체

앞에서 말씀드렸듯이  C언어의 구조체는 모든 데이터형을 포함할 수 있습니다. 구조체 안에 구조체가 들어갈 수 있기도 합니다.(우엑)

사각형의 좌표 값을 읽어들이고 사각형의 면적을 계산하여 출력하는 프로그램입니다. 예제를 보겠습니다.

 

#include <stdio.h>

int length, width;
long area;

struct leng{
 int x;
 int y;
};
struct rectangle{
 struct leng topleft;        //왼쪽 위
 struct leng bottomrt;     //오른쪽 위
}box;
main(){
 printf("왼쪽 위의 x좌표를 입력해주세요 : ");
 scanf("%d",&box.topleft.x);       //구조체 멤버 연산자인 마침표(.)를 이용해 연결해줍니다.

 printf("왼쪽 위의 y좌표를 입력해주세요 : ");
 scanf("%d",&box.topleft.y);

 printf("오른쪽 위의 x좌표를 입력해주세요 : ");
 scanf("%d",&box.bottomrt.x);

 printf("오른쪽 위의 y좌표를 입력해주세요 : ");
 scanf("%d",&box.bottomrt.y);

 width = box.bottomrt.x - box.topleft.x; // 오른쪽 위의 x좌표 - 왼쪽 위의 x좌표
 length = box.bottomrt.y - box.topleft.y; // 오른쪽 위의 y좌표 - 왼쪽 위의 y좌표
 area = width * length;
 printf("이 영역의 넓이 : %d\n", area);

        

결과

 

입력한 숫자는 제가 임의로 넣은 숫자입니다.

다음엔 구조체 안에 배열을 선언해보겠습니다.