구조체(structure)는 서로 다른 자료형의 변수들을 하나의 이름 아래 묶어 놓은 사용자 정의 자료형입니다. 즉, 공통된 이름을 공유하는 이질적인(heterogeneous) 데이터 항목들의 집합이라고 할 수 있습니다.
구조체의 주요 특징
대입 연산자(=)를 사용하면 서로 다른 자료형을 가진 구조체의 모든 멤버 내용을 같은 타입의 다른 구조체 변수에 한 번에 복사할 수 있습니다.
복잡한 자료형을 다루기 위해 구조체 안에 또 다른 구조체를 만들 수 있으며, 이를 중첩 구조체(nested structure)라고 합니다.
함수에 인수를 전달할 때 구조체 전체를 넘기거나, 구조체의 개별 멤버만 넘기거나, 구조체의 주소를 넘기는 것도 모두 가능합니다.
구조체 포인터(pointer)를 생성하여 사용할 수 있습니다.
구조체 선언의 일반 형식
구조체는 struct 키워드를 사용하여 다음과 같이 선언합니다.
struct tagname {
datatype member1;
datatype member2;
...
datatype memberN;
};여기서 각 요소의 의미는 다음과 같습니다.
struct: 구조체를 정의할 때 반드시 필요한 키워드입니다.
tagname: 구조체의 이름을 지정합니다.
member1, member2: 구조체를 구성하는 데이터 항목(멤버)들을 의미합니다.
예를 들어, 책 정보를 담는 구조체는 다음과 같이 선언할 수 있습니다.
struct book {
int pages; // 페이지 수
char author[30]; // 저자
float price; // 가격
};구조체 변수 선언하는 3가지 방법
구조체 변수를 선언하는 방법에는 크게 세 가지가 있습니다.
방법 1: 구조체 정의와 동시에 변수 선언
struct book {
int pages;
char author[30];
float price;
} b;구조체를 정의하는 마지막 부분에 바로 변수명을 붙여 선언하는 방식입니다.
방법 2: 태그 없는 구조체로 변수 선언
struct {
int pages;
char author[30];
float price;
} b;구조체 이름(tagname)을 생략하고 곧바로 변수를 선언하는 방식입니다. 단, 이 경우 동일한 구조를 가진 다른 변수를 나중에 추가로 선언할 수 없다는 점에 유의해야 합니다.
방법 3: 정의 후 별도로 변수 선언
struct book {
int pages;
char author[30];
float price;
};
struct book b;가장 일반적으로 사용되는 방식입니다. 구조체를 먼저 정의해 두면, 필요할 때마다 struct book 타입의 변수를 여러 개 만들어 재사용할 수 있습니다.