(1) 구조체 (Structure Type)
구조체란 사용자가 C언어의 기본 타입을 이용해 새롭게 정의할 수 있는 사용자 정의 타입이다.
배열은 같은 타입의 변수들을 하나로 묶지만, 구조체는 타입이 다른 변수들을 하나로 묶는다.
이러한 구조체를 구성하는 변수를 구조체의 멤버(member) 또는 멤버 변수(memeber variable)라고 한다.
(2) 구조체의 정의와 선언
구조체는 아래와 같이 struct 키워드를 사용하여 정의한다.
// 문법
struct 구조체 이름 {
멤버변수1타입 멤버변수1이름;
멤버변수2타입 멤버변수2이름;
...
};
위와 같이 struct 키워드를 사용하여 구조체를 정의할 수 있다.
중괄호의 마지막에 세미콜론을 작성하는 것을 잊지 말자.
이렇게 정의된 구조체 타입은 구조체 변수로 선언하여 사용할 수 있다.
struct movie my_movie;
// 미리 정의한 사용자 정의 타입인 movie 구조체로 my_movie라는 구조체 변수를 선언
또한, 구조체의 정의와 구조체 변수의 선언을 동시에 할 수 있다.
// 문법
struct 구조체 이름 {
멤버변수1타입 멤버변수1이름;
멤버변수2타입 멤버변수2이름;
...
} 구조체변수이름;
// 예시
struct movie {
char title[30];
char director[30];
int releaseDate;
} my_movie;
(3) typedef 키워드
typedef 키워드는 이미 존재하는 타입에 새로운 이름을 붙일 때 사용한다.
구조체 변수를 선언하거나 사용할 때에는 매번 struct 키워드를 사용하여 구조체임을 명시해야 한다.
하지만 typedef 키워드를 사용하여 새로운 이름을 선언하면, 매번 struct 키워드를 사용하지 않아도 된다.
typedef 키워드를 사용하여 새로운 이름을 선언할 수 있다.
// 문법
typedef struct 구조체이름 새로운구조체이름;
// 예시
typedef struct movie FILM;
typedef로 정의하는 자료형은 이름을 대문자로 하는 것이 관례이다.
또한, 구조체의 정의와 typedef 선언을 동시에 할 수 있다.
// 문법
typedef struct {
멤버변수1타입 멤버변수1이름;
멤버변수2타입 멤버변수2이름;
} 새로운구조체이름;
// 예시
typedef struct {
char title[30];
char director[30];
int releaseDate;
} FILM;
(4) 구조체 멤버로의 접근
배열에서는 인덱스를 이용하여 배열 요소에 접근할 수 있다.
하지만 구조체에서 구조체 멤버로 접근하려고 할 때에는 멤버 연산자 .를 사용한다.
(구조체의 주소값과 구조체의 첫 번째 멤버 변수의 주소값은 언제나 같다.)
// 문법
구조체변수이름.멤버변수이름
// 예시
my_movie.director
(5) 구조체 변수의 초기화
구조체 변수를 초기화할 때에는 멤버 연산자 .와 중괄호를 사용한다.
// 문법
구조체변수이름 = {.멤버변수1이름 = 초기값, .멤버변수2이름 = 초기값, ...};
// 예시
my_movie = {.title = "spiderman100", .director = "jason", .releaseDate = 20880912};
위와 같이 모든 멤버 변수를 초기화할 수도 있지만, 원하는 멤버 변수만을 초기화할 수도 있다.
멤버 변수가 정의된 순서와 초기화하는 순서는 아무런 상관이 없다.
초기화하지 않은 멤버 변수는 0으로 초기화된다.
또한, 배열의 초기화와 같은 방법으로 구조체 변수를 초기화할 수 있다.
// 문법
구조체변수이름 = {멤버변수1초기값, 멤버변수2초기값, ...};
// 예시
my_movie = {"spiderman100", "jason", 20880912};
이 때 멤버 변수가 정의된 순서에 따라 차례대로 초기값이 설정되며, 나머지 멤버 변수는 0으로 초기화된다.
(6) 실행 예시
앞서 살펴본 내용들을 토대로 한 실행 예제이다.
#include <stdio.h>
struct movie {
char title[30];
char director[30];
int releaseDate;
};
int main(void) {
struct movie my_movie = {"spiderman100", "jason", 20880912};
struct movie your_movie = {"superman200", "ash", 25401022};
printf("제목: %s, 감독: %s, 개봉일:%d", my_movie.title, my_movie.director, my_movie.releaseDate);
printf("제목: %s, 감독: %s, 개봉일:%d", your_movie.title, my_movie.director, my_movie.releaseDate);
return 0;
}
// 출력 결과
// 제목: spiderman100, 감독: jason, 개봉일: 20880912
// 제목: superman200, 감독: ash, 개봉일: 25401022
아래는 typedef 키워드를 사용한 예시이다.
#include <stdio.h>
typedef struct {
char title[30];
char director[30];
int releaseDate;
} FILM;
int main(void) {
FILM my_movie = {"spiderman100", "jason", 20880912};
FILM your_movie = {.title = "superman200", .releaseDate = 25401022};
printf("제목: %s, 감독: %s, 개봉일:%d", my_movie.title, my_movie.director, my_movie.releaseDate);
printf("제목: %s, 감독: %s, 개봉일:%d", your_movie.title, my_movie.director, my_movie.releaseDate);
return 0;
}
// 출력 결과
// 제목: spiderman100, 감독: jason, 개봉일: 20880912
// 제목: superman200, 감독: , 개봉일: 25401022
🍉 참고
'Language > C' 카테고리의 다른 글
[C언어] 포인터의 연산 (0) | 2024.04.16 |
---|---|
[C언어] 포인터와 구조체 (0) | 2024.04.16 |
[C언어] 자료형 (1) | 2024.04.15 |
[C언어] 포인터 (0) | 2024.04.14 |
[C언어] 변수 (2) | 2024.04.14 |