관리 메뉴

c0smicb0y

[자료구조] Structure & Union (구조체와 유니언) 본문

프로그래밍/자료구조

[자료구조] Structure & Union (구조체와 유니언)

2015. 1. 31. 01:30

구조체

배열은 같은 타입의 데이터의 모임인데 반해 타입이 다른 데이터를 그룹화할 수 있는 방법 중 하나가 구조체(structure)이다.

예를 들어 다음과 같은 선언은

1
2
3
4
struct {
    char name[16];
    int age;
} person;
cs

이름이 person이고 2개의 필드를 갖는 변수를 생성한다.


char형 배열 name

int형 변수 age


이러한 필드에 아래와 같이 값을 할당할 수 있다.

1
2
strcpy(person.name,"Jang");
person.age = 20;
cs


typedef명령문을 사용하여 구조체 데이터 타입을 생성할 수도 있다.

1
2
3
4
typedef struct human {
    char name[10];
    int age;
};
cs

혹은

1
2
3
4
typedef struct {
    char name[10];
    int age;
} human;
cs


human은 구조체 정의를 통해서 정의된 타입 이름으로 변수를 선언할때 처럼 해당 구조체로 선언할 수 있다.

1
human person1, person2;
cs


구조체 속에 또 다른 구조체를 정의할 수도 있다. human 구조체 속에 키와 몸무게를 포함하는 physical 구조체를 포함시키고자 할때 다음과 같이 작성한다.

1
2
3
4
5
6
7
8
9
10
typedef struct {
    int weight;
    int height;
} physical;
 
typedef struct {
    char name[16];
    int age;
    physical phy;
} human;
cs

키가 180이고 몸무게가 70인 사람은 다음과 같이 작성할 수 있다.

1
2
person1.phy.weight = 70;
person1.phy.height = 180;
cs



유니언

유니언은 구조체와 비슷하지만 구조체는 각 필드들이 각각의 공간을 가지는 반면에 유니언은 모든 필드가 같은 공간을 공유한다. 예를 들어 위에서 설명한 human 자료형은 다음과 같은 구조를 가진다.


하지만 동일한 필드값을 가지는 유니언 uperson을 다음과 같이 정의하면

1
2
3
4
union {
    char name[16];
    int age;
} uperson;
cs

이 자료형은 다음과 같은 구조를 가진다.


age와 name[16]이 서로의 공간을 공유하여 쓰고 있다. 여러가지 특성이 있는데 어떨때는 이게 안쓰이고 저게 쓰이고 어떨때는 이게 쓰이고 저게 안쓰일 경우에 사용한다.


자기 참조 구조체

자기 참조 구조체는 필드 중에 자기 자신을 가리키는 포인터가 하나 이상 존재하는 구조체를 말한다.

1
2
3
4
typedef struct {
    int data;
    struct list *link;
} list;
cs

이를 활용해서 구조체끼리 서로 연결을 만들 수 있다.

이러한 연결에 대해서는 나중에 리스트를 다룰 때 자세히 알아보도록 하자.





'프로그래밍 > 자료구조' 카테고리의 다른 글

[자료구조] Array (배열)  (0) 2015.01.24
[자료구조] 기본개념  (0) 2015.01.10
Comments